我有一個服務來存放對於多個控制器很重要的數據(在關聯數組中)。這個服務保存的數據是異步更新的。在我的控制器中,我在範圍myService上創建一個變量,併爲其分配該服務。然後,在我看來,我將數據作爲myService.theInrestrestData引用。如果這很重要,在視圖中,我引用ng-repeat中的interestingData assoc數組。由於某些原因,當數據更新(我獲得控制檯日誌)時,可見頁面不會改變,但是如果我執行一些UI操作(例如打開管理單元http://jtrussell.github.io/angular-snap.js/),那麼數據將被更新,但進一步的更改還需要一些UI操作才能看到。綁定到控制器範圍的服務更改不可見
我一定在做錯事。任何關於如何解決這個問題的建議?我想也許我需要申請被叫,但數據是在服務上沒有提及的控制器的範圍,我需要申請
請參閱這兩個版本的小提琴。兩者都顯示相同的日誌記錄,但其中一個(使用$ interval http://jsfiddle.net/a6Nhs/5/的更新)更新了「屏幕」(我在這裏討論的是什麼?DOM),另一個(window.setInterval http://jsfiddle.net/a6Nhs/4/)沒有。在我的實際應用程序中,它不是一個導致異步更新的間隔,而是通過websocket接收信息,因此對於我而言,解決方案並不像改變爲$ interval那麼簡單。
HTML:
<div ng-controller="MyCtrl">
Hello, {{name}}!
{{numsService}}
<li ng-repeat="(key,val) in numsService.nums">
{{key}} | {{val}}
</li>
</div>
和JS:
var myApp = angular.module('myApp',[]);
//myApp.directive('myDirective', function() {});
myApp.service('myService', function() {
this.nums={};
this.total = 0;
});
myApp.service('differentService', function(myService, $interval){
$interval(function(){ //using $interval works, using window.setInterval does not
console.log('diffService');
myService.nums[myService.total+'idx']=myService.total++;
console.log(myService.nums);
}, 1000);
});
function MyCtrl($scope, myService, differentService) {
$scope.name = 'Superhero';
$scope.numsService = myService;
}
我建議你做一個plunker http://plnkr.co/來顯示你的例子。 – PeterFromCologne
@PeterFromCologne添加了小提琴和代碼 – Michael