当我使用for循环而不是if语句时,为什么会出现ng-repeat dupe错误?

时间:2015-07-27 18:36:54

标签: angularjs angularjs-ng-repeat

this Plunker中的代码可以正常工作(只有前3个链接可以执行某些操作)。但随着名单开始增长,我意识到我需要一个for循环。所以在switch function内我改变了这个:

  if(obj == "SP") {
    $scope.discipline ='Link2'
    return $scope.files = spFiles;
  }
  else if(obj == "LSM"){
    $scope.discipline = "Link3"
    return $scope.files = lsmFiles;
  }
  else if(obj == "AR"){
    $scope.discipline = "Link1"
    return $scope.files = arFiles;
  }

进入这个:

for(i=0;i<disciplines.length;i++){
   if(obj == disciplines[i].initial){
       return $scope.files = disciplines[i].array;
   }
}

disciplines数组位于script.js文件的顶部。

问题是,现在突然间我点击其中一个链接时出现了欺骗错误。我不知道什么是重复。我因为此错误而阅读documentation,并将track by $index添加到index.html底部的ng-repeat。看看this Plunker,了解它现在的作用。当然有一个简单的解释。我从来没有遇到过这个。

我在这里找到的唯一一个似乎与我的问题相关的答案是this one,但是,ng-repeat使用的对象不是JSON对象我很漂亮肯定的是:

spFiles.push({
      floor:floors[c].name, initial:floors[c].initial, status:spFloorStatus[i]
});

另外,在我创建for循环之前它正常工作导致了麻烦。

如果有什么不清楚,我道歉。如果你需要我澄清任何事情只是让我知道,我试图尽可能彻底,尽可能地混淆。

1 个答案:

答案 0 :(得分:-1)

那是因为disciplines [i] .array只返回字符串,而不是你的变量,名为arFiles。

您可以将这些变量初始化为:

var tempFiles={};

然后添加:

tempFiles.arFiles={
      floor:floors[c].name, initial:floors[c].initial, status:arFloorStatus[i]
    };

并获得:

return $scope.files = tempFiles[disciplines[i].array];