[英]Angular JS - Scope Watch Not Updating
我可能正在使用这个错误,但是我有一个监视变量的函数,当从视图中更改该变量时,函数会运行..但是当兄弟函数更改该变量时,监视器不会运行。 我编码错了吗?
scope.$watch (settings.number, function(val){
alert('test');
})
scope.exampleObj = {
exampleFunc : function(){
settings.number += 5;
}
};
所以当我调用scope.exampleObj.exampleFunc(); 不应该调查范围吗?
将字符串替换为函数或使用$ watchCollection,如下所示:
使用var:
angular.module('TestApp', [])
.controller('MainCtrl', function($scope){
// Object
var settings = {
number: 1,
foobar: 'Hello World'
};
$scope.$watch(function(){ return settings.number; }, function(newValue, oldValue){
console.log('New value detected in settins.number');
});
$scope.$watchCollection(function(){ return settings; }, function(newValue, oldValue){
console.log('New value detected in settings');
});
});
使用$ scope:
angular.module('TestApp', [])
.controller('MainCtrl', function($scope){
// Object
$scope.settings = {
number: 1,
foobar: 'Hello World'
};
$scope.$watch('settings.number', function(newValue, oldValue){
console.log('New value detected in $scope.settings.number');
});
});
示例: http : //jsfiddle.net/Chofoteddy/2SNFG/
*注意 :AngularJS 1.1.x及更高版本中提供的$ watchCollection。 如果您需要在数组中观察多个值或在对象中观察多个属性,那么它非常有用。
观察者期望范围内的属性的名称(即字符串),而不是对象本身。
scope.$watch ('settings.number', function(newval,oldval){
alert('test');
});
scope.exampleObj = {
exampleFunc : function(){
scope.settings.number += 5;
}
};
我假设您首先声明scope.settings.number
,并且您打算将scope.settings.number
settings.number
为settings.number
因为您只能查看作为角度scope
属性的变量。
虽然你可能只用settings.number += 5;
做正确的事情settings.number += 5;
,我可能只是累了。
您需要将objectEquality
设置为true。 因此,您可以使用angular.equals比较对象的相等性,而不是比较引用相等性。
有关更多信息,请访问文档
scope.$watch (settings.number, function(val){
alert('test');
},true)
scope.exampleObj = {
exampleFunc : function(){
settings.number += 5;
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.