在我的angular directive.js中,我为控制器的属性'appInfo'定义了范围监视:
this.scope_.$watch('ctrl.appInfo', function(newValue, oldValue) {
在测试用例中,我在范围内为appInfo设置了一个值:
scope.$apply(function() {
scope.appInfo = [{
language: 'English',
name: 'AppName',
description: 'description'
}];
});
但是当上述应用发生时,指令中的范围监视方法不会被调用。有人可以帮助我做错了吗?我是棱角分明的新手,所以我一定是做些傻事。
答案 0 :(得分:1)
您需要在已更改的数据中查看特定属性。 ataching示例我正在用间隔更改appInfo.num然后我正在申请你可以看到这里的例子。打开控制台,你会在那里看到它 http://plnkr.co/edit/XGoLmDaSVkL6cEVQnkdh?p=preview working example
它是控制器
angular.module('HelloWorldApp', [])
.controller('HelloWorldController', function($scope) {
setInterval(function(){
$scope.appInfo.num = Math.floor(Math.random() * 100);
$scope.$apply();
}
, 3000);
$scope.appInfo = {
language: 'English',
name: 'AppName',
description: 'description',
num:1
};
$scope.$watch('appInfo.num', function(newValue, oldValue) {
console.log($scope.appInfo);
});
});
答案 1 :(得分:1)
您的属性绑定到范围,而不是控制器。您可以将该属性作为监视的第一个参数返回:
$scope.$watch(function() {
return $scope.appInfo;
},
function(newValue, oldValue) {
console.log('watch fired');
});