無法弄清楚此代碼中的錯誤是什麼。我試過只在這裏發佈代碼的相關部分。AngularJs變量未更新
控制器
myApp.controller('MessageCtrl', function ($scope, notificationService, $rootScope) {
$scope.notificationService = notificationService;
$scope.msgCount = 0;
$scope.notificationService.subscribe({channel : 'my_channel'});
$rootScope.$on('pubnub:msg',function(event,message){
$scope.msgCount = $scope.msgCount + 1;
//$scope.$digest();
});
});
我的通知角服務
myApp.factory('notificationService',['$rootScope', function($rootScope) {
var pubnub = PUBNUB.init({
publish_key : '..',
subscribe_key : '..'
});
var notificationService = {
subscribe : function(subscription) {
pubnub.subscribe({
channel : subscription.channel,
message : function(m){
$rootScope.$broadcast('pubnub:msg', m);
}
});
}
};
return notificationService;
}]);
而且模板:
<div>
Count = {{msgCount}}
</div>
問題:
使用控制檯日誌&使用因緣測試中,我已經證實,當我從通知服務做$broadcast
在MessageCtrl
的$rootScope.$on
方法獲取調用。並且msgCount
變量正在遞增。但是,我沒有看到更新的值反映在模板中,而沒有運行 a $scope.$digest()
。我很確定我不應該需要呼叫$scope.$digest
,即Angular應該爲我提供這種綁定。
有趣的是,當我從另一個控制器嘗試$rootScope.$broadcast
時,模板中的msgCount
增加了,而不必調用$scope.$digest
()。
任何人都可以在這裏幫助我。謝謝。
更新 感謝彼得看着谷歌的小組討論,包裹在$apply
的$broadcast
奏效了。
$rootScope.$apply(function(){
$rootScope.$broadcast('pubnub:question', m);
});