Javascript 为什么在将数据从数组发送到不同名称的数组时会出现ngRepeat:dups?

Javascript 为什么在将数据从数组发送到不同名称的数组时会出现ngRepeat:dups?,javascript,angularjs,angularjs-ng-repeat,angularjs-service,Javascript,Angularjs,Angularjs Ng Repeat,Angularjs Service,我有一个数组,ng重复页面上的标签列表。接下来我有一个ng点击,它将标签数据发送到另一个控制器的范围内,该控制器的任务是在另一个列表中显示这些选定的标签 在上面的plnkr中更容易看到正在运行的代码,但基本内容是: 第一个标签阵列位于cnt控制器中 单击标记时,它将存储在TagDetailsFactory服务中 然后我向视图控制器广播一个事件,然后调用TagDetailsFactory中的getTagDetails函数来检索保存的标记,并将它们存储到视图控制器中的viewTags数组中 这就


我有一个数组,
ng重复页面上的标签列表。接下来我有一个
ng点击
,它将标签数据发送到另一个控制器的范围内,该控制器的任务是在另一个列表中显示这些选定的标签

在上面的plnkr中更容易看到正在运行的代码,但基本内容是:

  • 第一个标签阵列位于cnt控制器中
  • 单击标记时,它将存储在
    TagDetailsFactory
    服务中
  • 然后我向视图控制器广播一个事件,然后调用
    TagDetailsFactory
    中的
    getTagDetails
    函数来检索保存的标记,并将它们存储到视图控制器中的
    viewTags
    数组中
这就是我得到ngdups错误的地方:(

但是,
cnt
中的数组名为
$scope.tags=[];
视图中的数组是
$scope.viewTags=[];


//代码在这里
角度.module('app',[])
.directive('tagDetails',function(){
返回{
限制:“E”,
链接:功能($scope、el、attrs){
//调试($scope,attrs);
},
范围:{
标记:'=ngModel'
},
模板:“{tag.details}”
};
})
.controller('cnt',['$scope',
“$rootScope”,
“TagDetailsFactory”,
职能范围,
$rootScope,
TagDetails(工厂){
$scope.tags=[];
对于(变量i=0;i<100;i++){
$scope.tags.push(
{name:'Foo Bar'+i,details:'details'+i}
);
}
$scope.showTagDetails=函数(t){
t、 showDetails=true;
}
$scope.leaveTag=函数(t){
t、 showDetails=false;
}
$scope.sendTag=函数(t){
TagDetailsFactory.saveTagDetails(t);
$rootScope.$broadcast('updateView');
}
}])
.factory('TagDetailsFactory',function(){
var savedTags=[];
var saveTagDetails=函数(标记){
savedTags.push(标签);
}
var getTagDetails=function(){
返回保存的数据标签;
}
返回{
saveTagDetails:saveTagDetails,
getTagDetails:getTagDetails
};
})
.controller('视图',['$scope',
“$rootScope”,
“TagDetailsFactory”,
职能范围,
$rootScope,
TagDetails(工厂){
$scope.viewTags=[];
$scope.$on('updateView',function(){
log('updateView');
var tags=TagDetailsFactory.getTagDetails();
控制台日志(标签);
$scope.viewTags.push(标签);
});
//$scope.showTagDetails=函数(t){
//t.showDetails=true;
// }
//$scope.leaveTag=函数(t){
//t.showDetails=false;
// }
}]);

ng repeat不允许重复项目(否则,如果您想更新某些内容,它如何跟踪这些项目?)。 " 为了解决此问题,您可以将
track by$index
添加到ng repeat值中:

ng-repeat="data in dataset track by $index"
您也可以通过数据中的其他值来跟踪它,但它必须是唯一的


所有地方都做了一些小的改进。检查:很好,是的,我看到这个工作正常,标签也很流行谢谢:)期待再也看不到那个错误消息了
ng-repeat="data in dataset track by $index"