0
我已經搜索過高和低,嘗試了很多'解決方案',並且無法正確地觀看服務。
服務:
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);
})
此代碼不能正常工作。我想避免使用$廣播,因爲它看起來像角度應該神奇地處理服務更新。任何見解都值得讚賞。
編輯:解決方案控制器:
$scope.$watch(
function() { return myService.testVar },
function(newVal) {
console.log(newVal);
}
)
如果有人在乎解釋這種行爲,這將有利於那些遇到同樣的問題。
經進一步調查,改變$間隔計時器爲100ms仍然導致控制器印刷到每這表明$範圍。$ 1000毫秒的手錶被設定爲1秒的最大速率控制檯。我想這是最好的使用從服務中設定$ scope.testVar $廣播或觀察者/回調方法,而不是O_O
「當您正在觀看服務價值並更新範圍時,這將按預期工作。」它並沒有。如果我直接像$ scope.watch('myService.value',...)那樣觀察服務值,則什麼都不會發生...... – user3516621
當您將字符串作爲第一個參數傳遞給它時,它期望它是該範圍的屬性。如果要使用服務中的值,則需要傳遞一個函數作爲第一個參數,並返回服務調用中的值。 – aet