나는 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이 지시어를 사용하지 않은 지금은 attrs.callback
를 사용할 때
<check-this my-data="vm.encryption" dirty="vm.dirty" what="column" callback="vm.checkAll()"></check-this>
아래로 실행하기 아니에요하지만
scope.callback()
은 내가
attrs.callback
을 확인할 때 심지어 콘솔에서 방법을 표시 실행됩니다.
왜 이런 현상이 발생합니까?
도 나는scope.$eval(attrs.callback)
및
scope.$apply(function() {
scope.$eval(attrs.callback);
});
을 시도했지만 호출하기 아니에요. 내가 참조를 받고있다
this article
'scope. $ eval (attrs.callback)'을 호출 할 수 있습니다. 거기에'$ scope.'를 연결할 필요가 없습니다. –
의견을 보내 주셔서 감사합니다. 당신이 완전히 정확하지는 않지만 (고립 된 범위로 인해'$ parent'가 필요합니다), 당신은 저의 실수를 깨닫도록 도와주었습니다. 답변이 수정되었습니다. –