【问题标题】:not updated template view -> it needs mous scroll, or clear input未更新模板视图 -> 它需要鼠标滚动或清除输入
【发布时间】:2014-06-10 17:23:04
【问题描述】:

我在本教程http://g00glen00b.be/spring-websockets-angular/ 下使用 angular.js 和 stomp-websockets,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>

【问题讨论】:

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


    【解决方案1】:

    你可能需要使用 scope.$apply 让它生效。 afaics sock.js 不是为 Angular 制作的,因此您需要让 Angular 知道范围内发生了某些变化。您可以使用 scope.$apply 执行此操作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多