为什么不't AngularJS希望在值重复的情况下列出数组项

Why doesn't AngularJS want to list array items if a value repeats?

本文关键字:情况下 数组 AngularJS 希望 为什么不      更新时间:2023-09-26

当我试图从数据库中列出一些东西时,我花了很长时间调试故障所在。事实证明,如果数组中有重复的值,Angular将拒绝在ng repeat中使用该数组。

示例如下:http://jsfiddle.net/2uyxu7ha/

Javascript:

var app = angular.module("Module", []);
app.controller("Controller", function($scope){
    $scope.array1 = ["1", "2", "3", "4"];
    $scope.array2 = ["1", "1", "3", "4"];
});

HTML:

<div ng-app="Module">
    <div ng-controller="Controller as ctrl">
        <ul>
            <li ng-repeat="item in array1">{{item}}</li>
        </ul>
        <ul>
            <li ng-repeat="item in array2">{{item}}</li>
        </ul>
    </div>
</div>

正如您将注意到的,第二个数组中只有一个值重复,因此不会显示整个列表。如果您只是将第二个值更改为"2",它就会显示出来。

我不想要这种行为,因为即使数据库中有一些重复的值,我仍然希望在前端看到它们。为什么会发生这种情况,我该如何解决?

对于这种情况,您需要track by $index

http://jsfiddle.net/2uyxu7ha/1/

文档解释:

https://docs.angularjs.org/error/ngRepeat/dupes

您需要在ng重复结束时使用track by $index

由于您使用的是ControllerAs语法,您可以使用此语法在控制器中引用$scope,而在HTML中,您只需要确保引用正确的数组。

参见更新的小提琴:

[http://jsfiddle.net/jaykan24/2uyxu7ha/2/][1]

现在,您不必担心重复ngRepeat问题。希望这能帮助

相关文章: