我可以在 AngularJS 作用域上设置一个 $watch,当我感兴趣的表达式发生更改时将被通知。但是一旦我失去了兴趣,我怎样才能停止观看呢?
当调用 $watch时,返回一个取消注册绑定表达式的函数。
$watch
例如,观察一个变量 foo只变化一次:
foo
var unregister = $scope.$watch('foo', function () { // Do something interesting here ... unregister(); });
希望这能有所帮助: -)
作为附加注释,但不回答——这也是杀死事件侦听器的相同原则。
var unregister = $rootScope.$on("listen-for-something-cool", function($event, params) { //Do cool stuff with params, then kill it unregister(); };
我只是想让其他人知道。
我不知道这个被接受的答案是如何起作用的! 对我来说,它根本没有起作用。
我使用的是 $watch Collection 而不是 $watch。然后我试图将它改为 $watch,并应用了已接受的答案,但是没有得到任何结果! !
唯一对我有用的是:
var watchFoo = $scope.$watch('foo', function () { // Do something interesting here ... return; });
正在取消手表的注册,打破了手表的循环。即使在这个循环被打破之后,它仍然工作得很好。它能够检测到对 Array 所做的更改。
我的代码是这样的:
var watchFoo = $scope.$watchCollection('foo', function (newFoo, oldFoo) { if(condition) { // Do something interesting here ... return; } else { // Do something else here ... } });
接受的答案可以使用,如果它为您工作,否则这个答案将派上用场!