반응형
The view is not updated in AngularJS
Updating the model property has no effect on the view when updating the model in event callback, any ideas to fix this?
This is my service:
angular.service('Channel', function() {
var channel = null;
return {
init: function(channelId, clientId) {
var that = this;
channel = new goog.appengine.Channel(channelId);
var socket = channel.open();
socket.onmessage = function(msg) {
var args = eval(msg.data);
that.publish(args[0], args[1]);
};
}
};
});
publish()
function was added dynamically in the controller.
Controller:
App.Controllers.ParticipantsController = function($xhr, $channel) {
var self = this;
self.participants = [];
// here publish function is added to service
mediator.installTo($channel);
// subscribe was also added with publish
$channel.subscribe('+p', function(name) {
self.add(name);
});
self.add = function(name) {
self.participants.push({ name: name });
}
};
App.Controllers.ParticipantsController.$inject = ['$xhr', 'Channel'];
View:
<div ng:controller="App.Controllers.ParticipantsController">
<ul>
<li ng:repeat="participant in participants"><label ng:bind="participant.name"></label></li>
</ul>
<button ng:click="add('test')">add</button>
</div>
So the problem is that clicking the button updates the view properly, but when I get the message from the Channel nothings happens, even the add()
function is called
You are missing $scope.$apply()
.
Whenever you touch anything from outside of the Angular world, you need to call $apply
, to notify Angular. That might be from:
- xhr callback (handled by $http service)
setTimeout
callback (handled by$defer
service)- DOM Event callback (handled by directives)
In your case, do something like this:
// inject $rootScope and do $apply on it
angular.service('Channel', function($rootScope) {
// ...
return {
init: function(channelId, clientId) {
// ...
socket.onmessage = function(msg) {
$rootScope.$apply(function() {
that.publish(args[0], args[1]);
});
};
}
};
});
ReferenceURL : https://stackoverflow.com/questions/10179488/the-view-is-not-updated-in-angularjs
반응형
'programing' 카테고리의 다른 글
제네릭을 사용한 타입스크립트 화살표 함수의 구문은 무엇입니까? (0) | 2023.04.06 |
---|---|
특정 Ajax 콜에서 .ajaxStart()를 호출하는 방법 (0) | 2023.04.06 |
How to add custom html attributes in JSX (0) | 2023.04.06 |
useCallback 의존관계 배열에 setState를 포함시켜야 합니까? (0) | 2023.04.06 |
jQuery를 사용하여 CSS 클래스 속성 변경 (0) | 2023.04.01 |