我可以在AngularJS作用域上设置一个$watch,当我感兴趣的表达式发生变化时,它会通知我。但是当我失去兴趣时,我如何停止观察呢?
vu8f3i0k1#
调用$watch时,返回一个注销绑定表达式的函数。例如,观察变量foo仅改变一次:
$watch
foo
var unregister = $scope.$watch('foo', function () { // Do something interesting here ... unregister(); });
t2a7ltrp2#
作为一个附加注解,但不是回答--这也是终止事件侦听器的相同原则。
var unregister = $rootScope.$on("listen-for-something-cool", function($event, params) { //Do cool stuff with params, then kill it unregister(); };
只是一个补充,我想让其他人知道会很酷...
fhity93d3#
我不确定被接受的答案是如何工作的!对我来说,它一点也不起作用。我使用的是$watchCollection而不是$watch。然后我试图将其改为$watch,并应用接受的答案,但一无所获!!唯一对我有效的是:
var watchFoo = $scope.$watch('foo', function () { // Do something interesting here ... return; });
**return;**正在注销手表,正在打破手表的循环。而且在打破循环后仍然工作正常。可以检测到阵列上的更改。
我的代码看起来像这样:
var watchFoo = $scope.$watchCollection('foo', function (newFoo, oldFoo) { if(condition) { // Do something interesting here ... return; } else { // Do something else here ... } });
接受的答案可以使用,如果它为您工作,否则这个答案将派上用场!
3条答案
按热度按时间vu8f3i0k1#
调用
$watch
时,返回一个注销绑定表达式的函数。例如,观察变量
foo
仅改变一次:t2a7ltrp2#
作为一个附加注解,但不是回答--这也是终止事件侦听器的相同原则。
只是一个补充,我想让其他人知道会很酷...
fhity93d3#
我不确定被接受的答案是如何工作的!对我来说,它一点也不起作用。
我使用的是$watchCollection而不是$watch。然后我试图将其改为$watch,并应用接受的答案,但一无所获!!
唯一对我有效的是:
**return;**正在注销手表,正在打破手表的循环。而且在打破循环后仍然工作正常。可以检测到阵列上的更改。
我的代码看起来像这样:
接受的答案可以使用,如果它为您工作,否则这个答案将派上用场!