次のようにカスタム フィルターを定義しています。
<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@AngularJS 1.1.4 の最新バージョンをダウンロード
ベストアンサー1
解決策は実際にここに記載されています: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