Javascript angularjs中真正返回的$watch方法是什么,以及它是如何工作的?
即使有注释,我也很难理解以下代码Javascript angularjs中真正返回的$watch方法是什么,以及它是如何工作的?,javascript,angularjs,function,watch,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 ov
// 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被调用了多少次?这是递归吗 您显示的代码很简单
- 存储对(刚刚添加的)
返回值的引用(请参见下面的$watch()
返回值)$rootScope.$watch
- 一旦第一次调用了
,它就会调用引用的$watch()
——从而导致函数
的ubinding$watch()
$watch()
语句返回的函数引用;然后,一旦$watch()
触发几次,我们就会调用该存储方法,解除$watch()侦听器的绑定
在该示例中,有一个if语句,它可以帮助我们确定何时是删除该$watch()
(例如,在第一次评估之后)的最佳时间
范围的更详细定义。$watch()
可在此处找到:
$watch(watchExpression,[listener],[objectEquality])代码>
…
返回此侦听器的注销函数
这很容易找到,只需在代码中放置一个断点。您好,递归。递归,你好!这与递归无关。(这就是说,实现似乎有问题,不太可能按预期工作。)@ExpertSystem确实如此。阅读文档后,我发现dereg与watch方法本身无关,它实际上是watch方法返回的一个注销函数。感谢您的回答,尤其是这篇精彩的文章!如果有帮助的话,那太好了。这是一个很好的特性,你也可以检查一次角度,这是扩展得益于。。。某些只读属性只能计算一次。。。为了澄清,watch可以被删除+1:它存储对删除新添加的watcher的函数的引用,因为$watch返回的就是这个函数。