Невозможно выяснить, что такое ошибка в этом коде. Я пробовал только размещать соответствующие части кода здесь.Переменная 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();
});
});
Мой Notification Угловая служба
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>
Проблема:
Использование консоли журналов & с помощью кармы тестов я подтвердил, что метод $rootScope.$on
в MessageCtrl
становится называется, когда я делаю $broadcast
из Notification Service. И что переменная msgCount
получает инкремент. Однако я не вижу обновленного значения, которое отражается в шаблоне без пробега a $scope.$digest()
. Я уверен, что мне не нужно будет звонить $scope.$digest
, т. Е. Angular должен предоставить мне эту привязку.
Интересно, что когда я попробовал $rootScope.$broadcast
от другого контроллера, то msgCount
в шаблоне был увеличен без вызова $scope.$digest
().
Может кто-нибудь любезно помочь мне здесь. Спасибо.
Update Благодаря Петру и глядя на групповое обсуждение Google, обернув $broadcast
в $apply
сделал трюк.
$rootScope.$apply(function(){
$rootScope.$broadcast('pubnub:question', m);
});