angularjs中的$ watch方法真正返回以及它是如何工作的?

时间:2014-05-24 06:58:31

标签: javascript angularjs function watch

即使使用评论

,我也难以理解以下代码
// Store the initial cell value so we can reset to it if need be
var oldCellValue;
var dereg = scope.$watch('ngModel', function() {
    oldCellValue = ngModel.$modelValue;
    dereg(); // only run this watch once, we don't want to overwrite our stored value when the input changes
});

在这种情况下,函数dereg被调用了多少次?这是递归吗?

1 个答案:

答案 0 :(得分:5)

您所展示的代码简而言之

  • 存储对的引用(仅添加) $watch()返回值(请参阅下面的$rootScope.$watch返回值)
  • 第一次调用$watch()时,会调用引用的function - 这会导致$watch() ubinding

阅读这篇好文章

Unbinding $watch() Listeners In AngularJS

摘要中的一小段摘录:

  

如您所见,我们正在存储$watch()语句返回的函数引用;然后,一旦$watch()触发几次,我们就会调用那个存储的方法,取消绑定$ watch()监听器。

在该示例中,有一个 if 语句,可以帮助我们决定何时是删除$watch()的最佳时间(例如,在第一次评估后)...

scope.$watch()更详细的定义可以在这里找到:

正如我们从这个摘录中看到的那样:

$watch(watchExpression, [listener], [objectEquality]);

  

...
   返回此侦听器的注销功能。