1. ホーム
  2. angularjs

[解決済み] Angular ng-repeat エラー "リピータ内の重複は許可されません。"

2022-02-02 05:30:01

質問事項

カスタムフィルタを以下のように定義しています。

<div class="idea item" ng-repeat="item in items" isoatom>    
    <div class="section comment clearfix" ng-repeat="comment in item.comments | range:1:2">
        ....
    </div>
</div>

フィルタが使用されている ng-repeat が、別の ng-repeat の中にネストされているのがわかると思います。

フィルタはこのように定義されています。

myapp.filter('range', function() {
    return function(input, min, max) {
        min = parseInt(min); //Make string input int
        max = parseInt(max);
        for (var i=min; i<max; i++)
            input.push(i);
        return input;
    };
});

得ている。

エラーです。リピータ内の重複は許可されていません。リピータ: item.comments のコメント|範囲:1:2 ngRepeatAction@. https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/an

解決方法は?

実際の解決方法は、こちらに記載されています。 http://www.anujgakhar.com/2013/06/15/duplicates-in-a-repeater-are-not-allowed-in-angularjs/

AngularJSはng-repeatディレクティブの中で重複を許しません。つまり、以下のようなことを行おうとすると、エラーが発生します。

// This code throws the error "Duplicates in a repeater are not allowed.
// Repeater: row in [1,1,1] key: number:1"
<div ng-repeat="row in [1,1,1]">

しかし、上記のコードを少し変更し、以下のように一意性を判断するためのインデックスを定義することで、再び動作するようになります。

// This will work
<div ng-repeat="row in [1,1,1] track by $index">

公式ドキュメントはこちら https://docs.angularjs.org/error/ngRepeat/dupes