从搭便车徒步旅行者指南到指令light bulb example,
scope.$watch(function() {
scope.bulb = controller.getState();
});
$watch
的第一个参数是一个函数,这里正在观察什么?
我在scope上阅读了另一篇SO的帖子,这就是解释。
“$watch
方法的第一个参数(”watchExpression“)可以是Angular字符串表达式(根据$ scope计算),也可以是使用{{1}调用的函数}作为第一个参数。“
我仍然不清楚使用函数作为$scope
的第一个参数,来自灯泡示例
- 作为参数隐式传递范围到该函数?
- 该函数是否隐式返回scope.bulb,因此正在监视scope.bulb?
答案 0 :(得分:4)
不,正在观看功能。这意味着调用该函数并根据上次每次apply-digest循环至少返回一次的值检查其值!范围确实已通过,但未在您的示例中使用。 HTH
P.S。使用监视表达式在范围上设置值有点奇怪。 watch表达式函数应该做的是返回状态并在回调中设置范围值。这意味着它仅在更改时设置,而不是每次检查时设置。奇怪的例子!
答案 1 :(得分:0)
对我来说,这似乎是$watch
的错误用法。该函数应返回一个值,该值将被观察以进行更改,但在这种情况下,它将始终为undefined
,因此将永远不会监视值的更改。
更好的方法是这样的:
scope.$watch(function() {
return controller.getState();
}, function(newVal) {
scope.bulb = newVal;
});
这会关注controller.getState()
的更改,并会在更改时将新值分配给scope.bulb
。
答案 2 :(得分:0)
这是在调用$ digest时通知的习惯用法。从documentation开始,请参阅$watch
的文档:
如果您想在每次调用$ digest时收到通知,您可以注册一个没有监听器的watchExpression函数。 (由于watchExpression可以在检测到更改时每$摘要周期执行多次,因此请准备好多次调用您的监听器。)