480

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

<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

4

10 に答える 10

47

JSON を期待していても同じエラーが発生する場合は、データを解析してください。

$scope.customers = JSON.parse(data)
于 2015-02-25T21:32:58.287 に答える
12

$index で ng-repeat トラックを使用していたプロジェクトで問題が発生していましたが、データがデータベースから取得されたときに製品が反映されませんでした。私のコードは以下の通りです:

<div ng-repeat="product in productList.productList track by $index">
  <product info="product"></product>
 </div>

上記のコードでは、product は product を表示するための別のディレクティブです。しかし、スコープからデータを渡すときに $index が問題を引き起こすことがわかりました。したがって、データの損失と DOM を更新できません。

以下のように、product.id を ng-repeat のキーとして使用して解決策を見つけました。

<div ng-repeat="product in productList.productList track by product.id">
  <product info="product"></product>
 </div>

ただし、上記のコードは再び失敗し、複数の製品に同じ ID が付属している場合、次のエラーがスローされます。

angular.js:11706 エラー: [ngRepeat:dupes] リピーターでの重複は許可されていません。'track by' 式を使用して一意のキーを指定します。リピータ

最後に、以下のように ng-repeat の動的な一意のキーを作成して問題を解決しました。

<div ng-repeat="product in productList.productList track by (product.id + $index)">
  <product info="product"></product>
 </div>

これで私の問題は解決しました。これが将来役立つことを願っています。

于 2016-05-05T07:32:36.033 に答える
6

「範囲」フィルターは何をするつもりですか?

これは、あなたがやろうとしていると私が思うものの実用的なサンプルです: http://jsfiddle.net/evictor/hz4Ep/

HTML:

<div ng-app="manyminds" ng-controller="MainCtrl">
  <div class="idea item" ng-repeat="item in items" isoatom>    
    Item {{$index}}
    <div class="section comment clearfix" ng-repeat="comment in item.comments | range:1:2">
      Comment {{$index}}
      {{comment}}
    </div>
  </div>
</div>

JS:

angular.module('manyminds', [], function() {}).filter('range', function() {
    return function(input, min, max) {
        var range = [];
        min = parseInt(min); //Make string input int
        max = parseInt(max);
        for (var i=min; i<=max; i++)
            input[i] && range.push(input[i]);
        return range;
    };
});

function MainCtrl($scope)
{
    $scope.items = [
        {
            comments: [
                'comment 0 in item 0',
                'comment 1 in item 0'
            ]
        },
        {
            comments: [
                'comment 0 in item 1',
                'comment 1 in item 1',
                'comment 2 in item 1',
                'comment 3 in item 1'
            ]
        }
    ];
}
于 2013-04-30T09:54:59.427 に答える
1

SharePoint 2010 で作業中にこのエラーが発生した場合: .json ファイル拡張子の名前を変更し、restService パスを必ず更新してください。追加の「$index による追跡」は必要ありませんでした。

幸いなことに、この根拠へのリンクが転送されました。

.json は、SP2010 で重要なファイル タイプになります。SP2010 には、特定の Web サービス エンドポイントが含まれています。これらのファイルの場所は 14hive\isapi フォルダーです。これらのファイルの拡張子は .json です。それがそのようなエラーを与える理由です。

「jsonファイルの内容がjsonであることのみを気にします-ファイル拡張子ではありません」

ファイル拡張子が変更されたら、すべて設定する必要があります。

于 2015-10-29T16:28:31.510 に答える
-1

私のJSON回答は次のようなものでした。

{"items": 
  &nbsp;[
    &nbsp;&nbsp;{
      "index": 1,
      "name": "Samantha",
      "rarity": "Scarborough",
      "email": "maureen@sykes.mk"
    },
    &nbsp;&nbsp;{
      "index": 2,
      "name": "Amanda",
      "rarity": "Vick",
      "email": "jessica@livingston.mv"
    }]
}

ということで、ng-repeat = "item in variables.items" ディスプレイしてみました。

于 2015-12-29T04:53:58.787 に答える