У меня есть контроллер, используемый для добавления задач. На этой странице пользователю необходимо выбрать группу, для которой необходимо действовать. Я написал директиву, которая используется, чтобы позволить пользователю выбрать группы (папки)Двухсторонняя привязка данных с директивой не работает
Моя страница Контроллер
function AddTaskController($scope) {
var vm = this;
vm.group = { whatsit: true };
$scope.$watch("vm.group", function() {
console.log("controller watch", vm.group);
},true);
}
страница HTML, где используется директива
<em-group-selection group="vm.group"></em-group-selection>
Конфигурация директивы
function GroupSelectionDirective() {
return {
scope: {
group: '='
},
controller: GroupSelectionDirectiveController,
controllerAs: 'vm',
templateUrl: '/views/templates/common/folderselection.html'
};
}
контроллер директивы:
function GroupSelectionDirectiveController($scope) {
var vm = this;
$scope.$watch("group", function() { console.log("yo1", vm.group); }, true)
$scope.$watch("vm.group", function() { console.log("yo2", vm.group); }, true)
}
Теперь, когда это срабатывает, оба console.log()
звонят в указатель огня один раз, с undefined
. Они больше не стреляют. Если в контроллере я установил vm.group
на что-то еще, то $watch
в AddTaskController
никогда не будет уволен.
Почему нет привязки данных?
Update:
Я заметил, что если в директиве, изменить функцию init()
в моей директиве использовать $scope
это работает! Могу ли я, как предлагает Федакин, использовать controllerAs
с двусторонней привязкой данных?
function init() {
$timeout(function() {
$scope.group.shizzy = 'timeout hit';
}, 200);
}
У меня всегда возникают проблемы с использованием '$ scope', смешанного с' controllerAs', я предлагаю удалить синтаксис 'controllerAs' и дать ему попробовать – Fedaykin
Я только заметил, что' $ scope.group' содержит право состав! Дело в том, что синтаксис 'controllerAs' действительно хорош, поэтому я хочу его использовать;/ – Chris
Чувак, я нашел ответ! В настройке директивы используйте 'bindToController: true', и он работает! – Chris