Angular JS $关注服务对象

时间:2014-04-09 18:42:04

标签: angularjs service updates

我已经搜索过高低,尝试了许多解决方案'并且无法正确观看服务。

服务:

self = {}; // or self = this;
self.testVar = null;

$interval(function() {
    self.testVar = Math.random();
}, 1000);

return self;

控制器:

$scope.testVar = myService.testVar;
$scope.$watch('testVar', function(newVal, oldVal) {
    console.log(newVal, oldVal);
})

此代码不起作用。我想避免使用$ broadcast,因为看起来angular应该神奇地处理服务更新。任何见解都表示赞赏。


编辑:控制器中的解决方案:

$scope.$watch(
    function() { return myService.testVar },
    function(newVal) {
        console.log(newVal);
    }
)

如果有人愿意解释这种行为,那么遇到同样问题的人会受益。


经过进一步调查,将$ interval计时器更改为100ms仍会导致控制器每隔1000ms打印到控制台,这表示$ scope。$ watch设置为最大速率为1秒。我认为最好使用$ broadcast或者观察者/回调方法而不是O_o

1 个答案:

答案 0 :(得分:0)

$scope.testVar = myService.testVar;
$scope.$watch('testVar', function(newVal, oldVal) {
    console.log(newVal, oldVal);
})

在此代码中,您可以从服务中设置$ scope.testVar。然后你看着它。什么都没有改变它。在您的"解决方案"中,它有效,因为您正在观看" live"来自服务的价值。您不需要使用$ broadcast或observer或callbacks。当您观察服务价值并更新范围时,这将按预期工作。