我已经搜索过高低,尝试了许多解决方案'并且无法正确观看服务。
服务:
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
答案 0 :(得分:0)
$scope.testVar = myService.testVar;
$scope.$watch('testVar', function(newVal, oldVal) {
console.log(newVal, oldVal);
})
在此代码中,您可以从服务中设置$ scope.testVar。然后你看着它。什么都没有改变它。在您的"解决方案"中,它有效,因为您正在观看" live"来自服务的价值。您不需要使用$ broadcast或observer或callbacks。当您观察服务价值并更新范围时,这将按预期工作。