如何停止AngularJS中的$ watch?


76

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

Answers:


143

调用$watch函数时,将取消注册绑定表达式。

例如,要观看变量foo仅更改一次:

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

希望有帮助:-)


14
为了清楚起见:在上面的示例中,“取消注册”回调是从watch函数本身内部调用的。并非必须如此,并且应用程序中其他地方的代码(即watch函数外部)可以很高兴地调用它,以确保watch函数不再被调用。
2014年

15
另一个注意事项:当您注册手表时,它会立即运行一次,然后每次值更改一次。因此,上面的确切代码将运行一次watcher函数,然后在对的任何更改作出反应之前注销它foo。话题不大,但我认为值得一提。
兆瓦。

21

作为额外的评论,但没有回答-这也是杀死事件侦听器的相同原则。

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

我认为其他人都知道这很酷...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.