【发布时间】:2013-03-30 06:24:24
【问题描述】:
我可以在 AngularJS 范围内设置一个 $watch,以便在我感兴趣的表达式发生更改时收到通知。但是,一旦我失去兴趣,我该如何停止观看呢?
【问题讨论】:
我可以在 AngularJS 范围内设置一个 $watch,以便在我感兴趣的表达式发生更改时收到通知。但是,一旦我失去兴趣,我该如何停止观看呢?
【问题讨论】:
当调用$watch 时,会返回一个取消注册绑定表达式的函数。
例如,观察变量foo 只更改一次:
var unregister = $scope.$watch('foo', function () {
// Do something interesting here ...
unregister();
});
希望有所帮助:-)
【讨论】:
foo 中的任何更改做出反应之前取消注册它。有点离题,但我认为值得一提。
作为附加评论,但不回答 - 这也是杀死事件侦听器的相同原则。
var unregister = $rootScope.$on("listen-for-something-cool", function($event, params) {
//Do cool stuff with params, then kill it
unregister();
};
只是我认为其他人知道会很酷的一个补充......
【讨论】:
我不确定接受的答案是如何工作的!对我来说,它根本不起作用。
我使用的是 $watchCollection 而不是 $watch。然后我尝试将其更改为 $watch 并应用接受的答案但无处可去!
唯一对我有用的是:
var watchFoo = $scope.$watch('foo', function () {
// Do something interesting here ...
return;
});
return; 正在注销手表并打破手表循环。即使在循环中断后它也能正常工作。它能够检测到对 Array 所做的更改。
我的代码看起来像:
var watchFoo = $scope.$watchCollection('foo', function (newFoo, oldFoo) {
if(condition) {
// Do something interesting here ...
return;
} else {
// Do something else here ...
}
});
如果对你有用,可以使用接受的答案,否则这个答案会派上用场!
【讨论】: