2015-09-25 53 views
0

我廠有「聊天」,通過socket.io連接到我的服務器的NodeJS和發送消息給服務器。角裝訂錯誤

.factory('Messages', function($ionicScrollDelegate){ 
    var messages = []; 
    return { 
     getMessages : function(){ 
     return messages; 
     }, 
     setMessage : function(msg){ 
     messages.push(msg); 
     } 
    } 
    })  
.factory('Chat', function(Socket, Messages){ 
    Socket.on('onChat', function(data){ 
     if (data.from !== username){ 
      Messages.setMessage({username : data.from, message : data.msg}); 
     } 
    }); 
    return : { 
     sendMessage: function(msg){ 
      Messages.setMessage({ 
      username: username, 
      message: msg 
      }); 
      Socket.request(route, { 
      rid: 'AA', 
      content: msg, 
      from: username, 
      target: '*' 
      }, function() { 
      }); 
    } 

和我的控制器從工廠檢查消息arr。

.controller('livePageCtrl', function($scope, Messages, Chat){ 
    $scope.data = {}; 
    $scope.data.message = ""; 
    $scope.messages = Messages.getMessages(); 
    $scope.sendMessage = function(msg){ 
     Chat.sendMessage(msg); 
     $scope.data.message = ""; 
    }; 
}); 

和我的看法形式

<div class="chat"> 
    <div class="row" ng-repeat="message in messages track by $index"> 
     <div class="col col-100""> 
     {{message.message}} 
     </div> 
    </div> 
</div> 
<input ng-model="data.message" type="text" placeholder="Chat to Room"> 
<button type="submit" ng-click="sendMessage(data.message)"></button> 

當我鍵入消息,並按下按鈕,發送我的ARR信息更新,我可以在DOM中看到消息,但如果我收到新郵件從服務器我的信息arr已更新,但DOM未更新。只有當我開始打印新的消息DOM更新後,我才能看到傳入的消息。我做錯了什麼?爲什麼我的DOM不會在來自服務器的新消息之後更新? 謝謝大家!很遺憾,我的英語)

+1

什麼是'Socket'? –

+0

返回套接字連接的服務 –

回答

1

這裏的問題是$digest週期是沒有運行,很可能是因爲角度不知道什麼時候新項目從插座到達。角通常運行$digest循環自動諸如當ng-click焙燒或$http呼叫解析爲。但是在這種情況下,您需要手動調用此過程。

你可以試試:

Socket.on('onChat', function(data){ 
    if (data.from !== username){ 
     $timeout(function(){ 
      Messages.setMessage({username : data.from, message : data.msg}); 
     });   
    } 
}); 

不要忘了導入$timeout到您的聊天工廠。

+0

非常感謝!幫助:) –