0

平均スタックのソケットを使用してチャットアプリケーションのモジュールを開発しています。しかし、角度の私のビューは適切に更新されていません。私のコンソールログには、罰金を取得しているとも、ビューは何かを得るが、それは正しく更新は行うべきでソケットで角度表示が更新されない

HTMLのようなされていない:

<div class="conversation-wrap col-lg-3"> 
    <dummyTag ng-repeat="thread in message"> 
     <div class="media conversation" ng-if="thread.sender._id !== currentUserId"> 
      <a class="pull-left"> 
       <img class="media-object" ng-src="{{thread.sender.profileImageURL}}" data-ng-class="{'active' : $index=== selected}" style="width: 50px; height: 50px;"> 
      </a> 
      <a href="#" ng-click="selectedThread(thread)"> 
       <div class="media-body"> 
        <h5 class="media-heading">{{thread.sender.displayName}}</h5> 
        <small ng-repeat="messageDetails in thread.messages">{{messageDetails.messageBody | limitTo:1}}</small> 
       </div> 
      </a> 
     </div> 
     <div class="media conversation" ng-if="thread.sender._id == currentUserId"> 
      <a class="pull-left"> 
       <img class="media-object" ng-src="{{thread.receiver.profileImageURL}}" style="width: 50px; height: 50px;"> 
      </a> 
      <a href="#" ng-click="selectedThread($index)"> 
       <div class="media-body"> 
        <h5 class="media-heading">{{thread.receiver.displayName}}</h5> 
        <!--         <small ng-repeat="messageDetails in thread.messages">{{messageDetails.messageBody | limitTo:1}}</small> 
--></div> 
      </a> 
     </div> 
    </dummyTag> 
</div> 
<div class="message-wrap col-lg-8"> 
    <div class="msg-wrap"> 
     <div class="alert alert-info msg-date"> 
      <strong>Today</strong> 
     </div> 
     <div class="media msg" ng-repeat="message in message.messages"> 
      <a class="pull-left" href="#"> 
       <img class="media-object" ng-src="{{message.author.profileImageURL}}" style="width: 32px; height: 32px;"> 
      </a> 
      <div class="media-body"> 
       <small class="pull-right time"><i class="fa fa-clock-o"></i> 12:10am</small> 
       <h5 class="media-heading">{{message.author.displayName}}</h5> 
       <small class="col-lg-10">{{message.messageBody}}</small> 
      </div> 
     </div> 
    </div> 

コントローラ:

'use strict'; 

// Create the 'chat' controller 
angular.module('chat').controller('MessageInboxController', ['$scope', '$location', 'Authentication', 'Socket', '$http', '$modal', 
    function($scope, $location, Authentication, Socket, $http, $modal) { 

     $scope.message = []; 
     $scope.text = {}; 

     $scope.LoadInitialData = function() { 
      //Method Call to Get Users on Team 
      $http.get('/api/teamsByUser').success(function(response) { 
       $scope.AllTeams = response; 
      }); 

      //Get All Threads on User 
      $http.get('/api/users/me').then(function(response) { 
       $scope.currentUserId = response.data._id; 
       $http.get('/api/GetAllThreads').then(function(response) { 
        $scope.message = response.data; 
        console.log($scope.message); 
       }); 
      }); //users/me then ending here 
     }; 



     //On Socket message on update converstation 
     Socket.on('UpdateConversation', function(message) { 
      console.log(message); 
      console.log($scope.message); 
      for (var i = 0; i < $scope.message.length; i++) { 

       if ($scope.message[i]._id === message._id) { 
        $scope.message[i].messages.push(message.messages); 
       } 
      } 
     }); 


     $scope.selectedThread = function(index) { 
      $scope.threadData = index; 
      $scope.message.messages = $scope.message[index].messages; 
      console.log($scope.message.messages); 
      // return index; 

     }; 

     //Method to update thread. That is send a new message 
     $scope.UpdateThread = function() { 
      console.log("Getting Here"); 

      if ($scope.currentUserId === $scope.message[$scope.threadData].sender._id) { 
       Socket.emit('UpdateThread', { 
        sendTo: $scope.message[$scope.threadData].receiver, 
        messageBody: $scope.text.messageBody 
       }); 
      } else { 
       Socket.emit('UpdateThread', { 
        sendTo: $scope.message[$scope.threadData].sender, 
        messageBody: $scope.text.messageBody 
       }); 
      } 
      $scope.text = ''; 

     }; 


     //Modal Method to Create a New Message 
     $scope.NewMessage = function() { 

      var modalInstance; 

      modalInstance = $modal.open({ 
       templateUrl: 'modules/chat/client/views/partials/NewMessage.client.view.html', 
       backdrop: true, 
       controller: 'NewMessageController', 
       size: 'md', 
       resolve: { 
        team: function() { 
         return $scope.AllTeams; 
        } 
       } 
      }); 
      modalInstance.result.then(function(result) { 
       // $scope.message = result; 
       // if($scope.message.receiverId === $scope.currentuserId){ 
       // $scope.message.receiverId = result.sender; 
       // } 
      }, function() { 

      }); 
     }; 
} 
]); 

enter image description here このどのように私のビューは、ソケットがトリガされたときに更新される**です(空の画像とメッセージはありません。しかし、私はページをリロードすると、私はデータベースからすべてのメッセージを取得しています)。最初は、それは角度のあるダイジェストサイクルのために何かかもしれないと思った。私は$ scopeで試した。$も同様に適用する。それでも同じ結果。私はこれが私の繰り返しの何かを持っていると確信しています。どんな種類の助けもありがとう!

[1]: http://i.stack.imgur.com/sUJH3.png 
+0

あなたは '$のscope.message [i]を.messages.concat(message.messages)のような連結を行うべきではありません 。 'プッシュの代わりに? 'message.messages'もまた配列です。 – hassansin

+0

concat tbhを使用していません。私はちょうどそれについて読んでそれを使いました。変わりはない。今は私が以前に得ていた歪んだビューを表示していません。 message.messagesはオブジェクトの配列なので、それはありますか? –

+0

'$ scope.message [i] .messages'と' message.messages'の両方がメッセージの配列である場合、pushを行うことは意味をなさない。 '$ scope.message [i] .messages = $ scope.message [i] .messages.concat(message.messages)'のようにマージする必要があります。プッシュとは異なり、結果を割り当てる必要があることに注意してください。 – hassansin

答えて

0

機能上のソケットに割り当てが不足しているようです。残りのコードに基づいて、$ scope.messageに着信メッセージを割り当てたいと仮定します。

+0

$ scope.messageはオブジェクトの配列です。それはすべてのスレッドを含んでいます。私のスキーマでは、スレッドスキーマ内のオブジェクトの配列をメッセージとしてネストしています。そして、Socket on関数では、更新されているスレッドだけです。あなたはscope.message配列にそのオブジェクトを(ソケット上で)割り当てなければならないと言っていますか? –

+0

それを試してみました。私は今見通しで何も得ていない。空白の画像でもない –

0

解決策問題は配列プッシュまたは何かではありませんでした。基本的に私はユーザープロファイル(画像やその他の詳細)を入力していませんでした。デバッガでトレースします。ログは手がかりを与えていませんでした。乾杯!次のコードで

0

更新しますSocket.on方法

//On Socket message on update conversation 
     Socket.on('UpdateConversation', function(message) { 
      console.log(message); 
      console.log($scope.message); 
     $scope.$apply(function() { 
      for (var i = 0; i < $scope.message.length; i++) { 

       if ($scope.message[i]._id === message._id) { 
        $scope.message[i].messages.push(message.messages); 
       } 
      } 
     }); 

     }); 
関連する問題