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

Bob*_*Bob 3 javascript function watch angularjs

即使有评论,我也很难理解以下代码

// 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
});
Run Code Online (Sandbox Code Playgroud)

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

Rad*_*ler 5

你所展示的代码简而言之

  • 存储引用(刚刚添加) $watch()返回值(参见下面的$rootScope.$watch返回值)
  • 一旦第一次是$watch(),它调用所引用function-这将导致ubinding的那$watch()

阅读这篇好文章

在AngularJS中取消绑定$ watch()监听器

摘要中的一小部分摘录:

如您所见,我们存储了$watch()语句返回的函数引用; 然后,一旦$watch()触发几次,我们调用该存储的方法,取消绑定$ watch()侦听器.

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

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

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

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

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

  • +1,澄清:它存储对删除新添加的观察者的函数的引用,因为这是$ watch返回的内容. (3认同)