Я хочу вызвать метод контроллера после директивы сделали изменения в DOM, но она не работает, так что я отправить этот метод в директиве, которая будучи под названием внутри scope.$watch
вызов метода контроллера в директиве работает с областью действия, но не с attrs?
.directive('checkThis', function($timeout) {
return {
restrict: 'E',
scope: {
myData: '=',
dirty: '=',
what: '@',
callback: '&'
},
link: function(scope, element, attrs) {
scope.$watch('myData', function(newValue, oldValue) {
if (newValue !== oldValue) {
if (newValue) {
scope.dirty++;
} else {
scope.dirty--;
}
check();
}
});
var check = function() {
if (angular.isDefined(scope.callback)) {
$timeout(function() {
console.log('being called');
scope.callback();
}, 0, false);
}
};
}
};
});
и использовать эту директиву в HTML как показано ниже
<check-this my-data="vm.encryption" dirty="vm.dirty" what="column" callback="vm.checkAll()"></check-this>
теперь, когда я использую attrs.callback
это не получение выполняется, но scope.callback()
выполняется даже тогда, когда я проверить attrs.callback
его отображения метода в консоли.
Почему такое поведение так?
даже я попытался scope.$eval(attrs.callback)
и
scope.$apply(function() {
scope.$eval(attrs.callback);
});
, но это не вызывался. Я принимаю ссылки от this article
Вы можете просто вызвать 'scope. $ Eval (attrs.callback)'; нет необходимости конкатенировать '$ scope.' там. –
Благодарим вас за комментирование. Хотя вы не совсем правильно (нужно '$ parent' из-за изолированной области), вы помогли мне понять мою ошибку. Ответ исправлен. –