2
看起來,在更改對象屬性時,該對象上的監視器會觸發 - 除非將該屬性設置爲函數。
angular.module('app', [])
.controller('ctrl', function($scope) {
$scope.object1 = {};
$scope.object2 = {};
$scope.clicked1 = function() {
$scope.object1.message = "Object1 property changed"
}
$scope.clicked2 = function() {
$scope.object1.fn = function() {
return "Object1 fn changed";
}
}
$scope.$watch('object1', function(o) {
if (o.message)
$scope.object2.message = o.message + ', and watch fired';
else if (o.fn) {
$scope.object2.message = o.fn();
}
}, true);
});
請參閱http://jsfiddle.net/TkWP6/。當clicked1被調用時,$ watch按照預期觸發,但是當clicked2被調用時,什麼都不會發生。
簡單的問題是爲什麼不能,而且可以做任何事情來讓$ watch手錶着火。