79

我可以在 AngularJS 范围内设置一个 $watch,以便在我感兴趣的表达式发生更改时收到通知。但是一旦我失去兴趣,我该如何停止观看呢?

4

3 回答 3

146

当调用$watch一个取消注册绑定表达式的函数时返回。

例如,观察一个变量foo只改变一次:

var unregister = $scope.$watch('foo', function () {
  // Do something interesting here ...
  unregister();
});

希望有帮助:-)

于 2013-03-30T06:28:24.877 回答
22

作为附加评论,但不回答 - 这也是杀死事件侦听器的相同原则。

var unregister = $rootScope.$on("listen-for-something-cool", function($event, params) {
   //Do cool stuff with params, then kill it
   unregister();
};

只是我认为其他人知道会很酷的一个补充......

于 2014-07-14T10:13:23.790 回答
0

我不确定接受的答案是如何工作的!对我来说,它根本不起作用。

我使用的是 $watchCollection 而不是 $watch。然后我尝试将其更改为 $watch 并应用接受的答案,但无处可去!

唯一对我有用的是:

var watchFoo = $scope.$watch('foo', function () {
  // Do something interesting here ...

    return;
});

返回; 正在注销手表并打破手表循环。即使在循环中断后它也能正常工作。它能够检测到阵列上所做的更改。

我的代码看起来像:

var watchFoo = $scope.$watchCollection('foo', function (newFoo, oldFoo) {
    
     if(condition) {
         // Do something interesting here ...      
          return;
     } else {
         // Do something else here ...
     }
     
    });

如果它适合您,可以使用接受的答案,否则这个答案会派上用场!

于 2021-09-20T18:15:59.860 回答