1

从搭便车徒步旅行者指南到指令、灯泡示例

  scope.$watch(function() {
            scope.bulb = controller.getState();
        });

的第一个参数$watch是一个函数,这里到底在看什么?

我阅读了另一篇关于范围的 SO 帖子,这就是解释。

“该$watch方法的第一个参数(“watchExpression”)可以是一个 Angular 字符串表达式(根据 $scope 计算),也可以是一个函数,$scope作为第一个参数调用。”

$watch从灯泡示例中,我仍然不清楚将函数用作第一个参数- 范围是否作为参数隐式传递给该函数?- 该函数是否隐式返回scope.bulb,因此正在监视scope.bulb?

4

3 回答 3

4

不,正在观看该功能。这意味着该函数被调用,并且它的值与它上次返回的值在每个应用摘要循环中至少检查一次!范围确实已通过,但未在您的示例中使用。高温高压

PS 使用watch 表达式在作用域上设置值有点奇怪。watch 表达式函数应该做的是返回状态并在回调中设置范围值。这意味着它仅在更改时设置,而不是每次检查时设置。奇怪的例子!

于 2013-09-18T11:38:31.847 回答
0

对我来说,这看起来像是$watch. 该函数应该返回一个值,该值将被监视更改,但在这种情况下,它将始终为undefined,因此永远不会监视该值的更改。更好的方法是这样的:

scope.$watch(function() {
    return controller.getState();
}, function(newVal) {
    scope.bulb = newVal;
});

这将监视 的变化controller.getState(),并在它发生变化时将新值分配给scope.bulb它。

于 2013-09-18T11:41:35.340 回答
0

这是一个在调用 $digest 时要通知的习惯用法。从文档中,请参阅文档$watch

如果您想在调用 $digest 时收到通知,您可以注册一个不带侦听器的 watchExpression 函数。(因为当检测到变化时 watchExpression 可以在每个 $digest 循环中执行多次,所以准备好多次调用你的监听器。)

于 2013-09-18T12:15:45.700 回答