简要背景: - 我正在构建一个社交网站,并将状态和用户存储在MongoDB中。所以你有这样的状态,例如
{
"status" : "Hello world.",
"profileURL" : "ac271a307",
"comments" : [ ],
"time" : "2013-10-28T22:25:24.278Z",
"active" : true,
"owner" : DBRef("users", "abc@efg.com"), // 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'表达式指定唯一键。”< / b>它没有意义,因为我实际上是通过状态['_ id']
使用$ track答案 0 :(得分:2)
@BuddistBeast评论(在我的问题下面)引导我找到解决问题的正确途径。我最终添加了https://github.com/a8m/angular-filter插件,并使用了&#34; unique&#34;其中提供过滤器。这修复了出现的ngRepeat dupes错误。但是,我仍然会看到出于某种原因出现重复状态(但控制台上没有错误)。所以,如果我发布&#34; hi&#34;例如,我会看到&#34; hi&#34;出现两次。我确实设法完全解决了这个问题,但解决这个问题的方法是独立的,超出了这个问题的范围。
答案 1 :(得分:1)
尝试:
<li ng-repeat="status in statuses track by $index | isUserStatus " ng-show="status.active" class="user-status-bland">
或:
<li ng-repeat="status in statuses | isUserStatus track by $index" ng-show="status.active" class="user-status-bland">
答案 2 :(得分:0)
尝试按$id(status)
跟踪它可能会解决您的问题