未更新模板视图 - >它需要mous滚动或清除输入

时间:2014-06-10 17:23:05

标签: angularjs angularjs-scope angularjs-ng-repeat spring-websocket

我在本教程http://g00glen00b.be/spring-websockets-angular/下使用了带有stomp-websockets的angular.js,sock.js。我从websocket获取消息,但在到达websocket的消息后,模板视图不会刷新。当我想更新模板视图时,我需要清除输入框,或者用鼠标滚动。

$scope.initiator = false;   
$scope.socket = {
    client: null,
    stomp: null
};

$scope.initSockets = function() {
   $scope.socket.client = new SockJS('/myUrl');
   $scope.socket.stomp = Stomp.over($scope.socket.client);

   $scope.notifyMessage = function(message) {
       $scope.initiator = true;
       $scope.messages.push(message)
   };

   $scope.socket.stomp.connect({}, function() {         
       $scope.socket.stomp.subscribe("/topic/messages", $scope.notifyMessage);                      
   });      

   $scope.socket.client.onclose = $scope.reconnect;     
};

$scope.initSockets();   


template view:
<ul><li ng-repeat="item in messages track by $index">{{item}}</li></ul>

1 个答案:

答案 0 :(得分:1)

您可能需要使用范围。$ apply使其生效。 afaics sock.js不是为角度而制作的,所以你需要让角度知道范围发生了变化。您可以使用范围。$ apply。

$scope.notifyMessage = function(message) {
   $scope.$apply(function(){
       $scope.initiator = true;
       $scope.messages.push(message)
   });
};