简介:-我正在建立一个社交网站,并使用MongoDB存储状态和用户。所以你有这样的状态
{
"status" : "Hello world.",
"profileURL" : "ac271a307",
"comments" : [ ],
"time" : "2013-10-28T22:25:24.278Z",
"active" : true,
"owner" : DBRef("users", "[email protected]"), // MongoDB Reference to the users Collection
"_id" : ObjectId("526ee454da46f33bf8000002")
}
现在,我正在做角。
<li ng-repeat="status in statuses | isUserStatus track by status['_id']" ng-show="status.active" class="user-status-bland">
// In here i display the users data and the status itself.
</li>
注意:这一切都完美
但这是问题。我正在使用Websockets自动更新新状态并将其添加到$ rootScope.statuses。
socket.on('new status', function(status) {
$timeout(function() {
$rootScope.$apply(function() {
// stack the new status at the top of all statuses.
$rootScope.statuses.unshift(status);
});
}, 0);
})
现在,如果您在websocket回调中执行'status'的console.log(),我会得到状态,并且它会出现两次。从某种意义上说,websocket发送了两次(我对此无能为力)。因此,当将其放在“ $ rootScope.statuses”中时,这就是当我收到错误信息“错误:[ngRepeat:dupes]不允许在转发器中重复。使用'track by'表达式指定唯一键。”这没有意义,因为我实际上是按状态使用$ track ['_ id']
最佳答案
@BuddistBeast评论(在我的问题下方)引导我走上了解决我的问题的正确之路。我最终添加了https://github.com/a8m/angular-filter插件并使用其中提供的“唯一”过滤器。修复了ngRepeat dupes错误显示的问题。但是,由于某些原因,我仍然会看到重复的状态(但控制台上没有错误)。因此,例如,如果我发布“ hi”,我将看到“ hi”出现两次。我确实设法完全解决了该问题,但是解决该问题的方法是单独的,不在本问题的范围之内。