平均スタックのソケットを使用してチャットアプリケーションのモジュールを開発しています。しかし、角度の私のビューは適切に更新されていません。私のコンソールログには、罰金を取得しているとも、ビューは何かを得るが、それは正しく更新は行うべきでソケットで角度表示が更新されない
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() {
});
};
}
]);
このどのように私のビューは、ソケットがトリガされたときに更新される**です(空の画像とメッセージはありません。しかし、私はページをリロードすると、私はデータベースからすべてのメッセージを取得しています)。最初は、それは角度のあるダイジェストサイクルのために何かかもしれないと思った。私は$ scopeで試した。$も同様に適用する。それでも同じ結果。私はこれが私の繰り返しの何かを持っていると確信しています。どんな種類の助けもありがとう!
[1]: http://i.stack.imgur.com/sUJH3.png
あなたは '$のscope.message [i]を.messages.concat(message.messages)のような連結を行うべきではありません 。 'プッシュの代わりに? 'message.messages'もまた配列です。 – hassansin
concat tbhを使用していません。私はちょうどそれについて読んでそれを使いました。変わりはない。今は私が以前に得ていた歪んだビューを表示していません。 message.messagesはオブジェクトの配列なので、それはありますか? –
'$ scope.message [i] .messages'と' message.messages'の両方がメッセージの配列である場合、pushを行うことは意味をなさない。 '$ scope.message [i] .messages = $ scope.message [i] .messages.concat(message.messages)'のようにマージする必要があります。プッシュとは異なり、結果を割り当てる必要があることに注意してください。 – hassansin