私は、anglejs内のjsonデータをプルするwebsocket接続を持っています。基本的なアイデアはコードです:配列の5項目は質問とコードです:配列の6項目は質問を削除する要求です。次のようになり受信angularjsの重複した配列項目を削除する
最初のJSONデータ:
[{"code":1,"timestamp":"2017-07-11T21:00:16.655706556Z","text":"Welcome to the listening pool, total clients 1","uuid":"51c7d6c7-8b6a-4b39-a460-343480e6cd23"},{"code":5,"timestamp":"2017-07-11T21:00:18.736695286Z","text":"By trying we can easily learn to endure adversity. Another man's, I mean.\n\t\t-- Mark Twain\n","uuid":"9046a275-ada8-415a-9dd3-37bdbfc43f75"}]
コード:5項目は、その後、質問キュー内のページに掲載されます。 websocketからの2回目の更新には、すでに投稿されている質問(コード:5)を削除するためのコード:6が含まれています。私は一致を見つけて質問を削除するためにuuidの値を使用しています。
[{"code":1,"timestamp":"2017-07-11T21:00:16.655706556Z","text":"Welcome to the listening pool, total clients 1","uuid":"51c7d6c7-8b6a-4b39-a460-343480e6cd23"},{"code":5,"timestamp":"2017-07-11T21:00:18.736695286Z","text":"By trying we can easily learn to endure adversity. Another man's, I mean.\n\t\t-- Mark Twain\n","uuid":"9046a275-ada8-415a-9dd3-37bdbfc43f75"},{"code":6,"timestamp":"2017-07-11T21:00:23.870193214Z","uuid":"9046a275-ada8-415a-9dd3-37bdbfc43f75"}]
私が問題としているのは、最初の複製のみを削除することです。ウェブソケットからより多くのデータを受信すると、既に削除された古いデータが戻されます。
ご協力いただければ幸いです。あなたはangularjsにunique
と呼ばれるフィルターを使用することができます
<section ng-controller="WaitingRoom">
<ul ng-repeat="data in MyData.collection | orderBy: '-timestamp' track by $index" ng-show="data.code == 5 && data.uuid != MyData.collection[$index].uuid">
<li id="code"> Code: {{ data.code}} </li>
<li> Timestamp: {{ data.timestamp | date:'medium'}} </li>
<li> Question: {{ data.text}} </li>
<li id="uuid"> ID: {{ data.uuid}} </li>
</ul>
</section>
angular.module('MY_APP', ['ngWebSocket'])
//
.factory('MyData', function($websocket) {
// Open a WebSocket connection
var dataStream = $websocket('ws://website.com/data');
var collection = [];
dataStream.onMessage(function(message) {
collection.push(JSON.parse(message.data));
});
var methods = {
collection: collection,
get: function() {
dataStream.send(JSON.stringify({ action: 'get' }));
}
};
return methods;
})
.controller('WaitingRoom', function ($scope, MyData) {
$scope.MyData = MyData;
});
は、あなただけの 'collection.push(JSON.parse(message.data))の前にチェックを追加することができます。'ラインは、それがコレクションにすでにだかどうかを確認するためにUUIDを確認するには?そうでない場合は、追加します。それ以外の場合は、その項目を無視、置換、または削除します。 –