传递给$ scope。$ watch函数的“范围”是什么?

时间:2015-04-15 02:03:36

标签: javascript angularjs

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

什么是"范围"那个$ scope。$ watch接受了它的第一个功能? (此后的所有内容都是与切线相关的额外信息)。我知道"范围"没有$通常只代表一个变量,如指令链接函数(范围,元素,属性,ngController)等。但是我不知道它来自哪里"这里。显然它已经连接到控制器的$ scope,但是怎么样?

此外,官方文档声明"每次调用$ digest()时都会调用watchExpression,并应返回将要监视的值。 (由于$ digest()在检测到更改时重新运行,因此watchExpression可以每$ digest()执行多次,并且应该是幂等的。)"那么做返回功能的优点是什么,而不仅仅是说$ scope.valueToWatch(这对我不起作用,但我看到有人这样做了。)


为了它的地狱而沾满工作的手表,并不是真的需要q: http://plnkr.co/edit/y86Wr93xLIao3wTwVsT8?p=preview

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

1 个答案:

答案 0 :(得分:1)

$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);