javascript - 传递给 $scope.$watch 函数的 "scope"是什么?

标签 javascript angularjs

$scope.$watch(
    function(scope) {return scope.aNumber;},
    function(newValue, oldValue) {alert("Value changed");}
    );
});

$scope.$watch 在其第一个函数中采用的“范围”是什么? (此后的所有内容都是与切线相关的额外信息)。我知道没有 $ 的“范围”通常只代表一个变量,如指令链接函数(范围、元素、属性、ngController)等。但是我不知道它“来自”这里。显然它连接到 Controller 的 $scope,但是如何连接呢?

此外,官方文档指出“每次调用 $digest() 时都会调用 watchExpression,并且应该返回将要监视的值。(因为 $digest() 在检测到更改时重新运行,所以 watchExpression 可以在每个调用中执行多次$digest() 并且应该是幂等的。)”那么,执行返回函数而不是仅仅说 $scope.valueToWatch (这对我不起作用,但我见过人们这样做)有什么优势。

<小时/>

用工作 watch 只是为了它的 hell ,并不真的需要它来q: http://plnkr.co/edit/y86Wr93xLIao3wTwVsT8?p=preview

对于那些稍后阅读相同 q 的人: $watch 上的好文章:http://tutorials.jenkov.com/angularjs/watch-digest-apply.html

最佳答案

与执行 $watch 的作用域相同。使用这个而不是 $scope 的唯一优点是它可以避免无用的闭包,但它的作用是一样的。

我不确定是否理解你的第二个问题,但请注意,它们是等效的:

1. $scope.$watch(function(scope) { return scope.prop1.prop2; }, cb);
2. $scope.$watch(function() { return $scope.prop1.prop2; }, cb);
3. $scope.$watch('prop1.prop2', cb);

关于javascript - 传递给 $scope.$watch 函数的 "scope"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29640386/

相关文章:

javascript - 如何在 td 标签中设置已在 th 标签中工作的调整大小?

javascript - Promise 返回 'undefined' 或 babel 编译的代码不等待返回(async/await)

javascript - Webpack imports-loader with messageformat 和 angular-translate

javascript - 如何存储使用 Angular Directive(指令)的 Accordion 的状态

javascript - 如何让智能感知/代码完成在 vscode 中工作

javascript - KML 图层的 Z 索引

javascript - React Portals 解决了什么问题?

performance - 大量模块会影响 AngularJS 的性能吗?

AngularJS:对象数组的更改不会触发 $watch

c# - 服务器在 AngularJS 中响应状态为 500(内部服务器错误)