2017-03-27 41 views
0

ulとliでng-repeatsを使用しているときにエラーが発生しています。ここで

は私のhtmlコードです:

<ul> 
     <li ng-repeat="(key, value) in (myData | groupBy: 'id')"> 
      {{key}} 
      <ul> 
       <li ng-repeat="details in value"> 
        {{details.name}} 
       </li> 
      </ul> 
     </li> 
    </ul> 

JSコード:

.filter('groupBy', function() { 
return function (data, key) { 

    var result = {}; 
    for (var i = 0; i < data.length; i++) { 
     if (!result[data[i][key]]) 
      result[data[i][key]] = []; 
     result[data[i][key]].push(data[i]) 
    } 
    alert(JSON.stringify(result)); 
    return result; 
}; 
}); 

これらは私が

enter image description here

+0

ここに 'groupBy'フィルターコードを追加 –

+0

どの角度フィルターを使用しますか?最新のhttps://github.com/a8m/angular-filter/releases/tag/v0.5.15を試してください – Olezt

答えて

0

がNGでtrack by $indexを配置しようとすると取得していますエラーです-repeat like:

<ul> 
    <li ng-repeat="(key, value) in myData track by id"> 
     {{key}} 
     <ul> 
      <li ng-repeat="details in value"> 
       {{details.name}} 
      </li> 
     </ul> 
    </li> 
</ul> 

あなたは、アレイ内の重複

<li ng-repeat="(key, value) in myData track by $index"> 
+0

gruopbyはカスタムフィルタです@Muhammed Neswine – anub

+0

あなたはフィドルを追加できますか? –

+0

https://plnkr.co/edit/kltGAyiY7DZbpmUUZGyg?p=preview @ Muhammed Neswine – anub

0

を持っている場合もtrack by $index無限のダイジェストは新しい結果にそれが機能を通るたびに返すフィルタによって引き起こされることができます。元のdata引数を直接変更して、data引数を再度返すように関数を書き直す必要があります。

+0

機能を書き直す方法を教えてください申し訳ありません@Giovani Vercauteren – anub

+0

フィルタ関数は毎回新しい 'result'オブジェクトを返します。 Angularはフィルタを実行し、結果を受け取ります。 Angularはフィルタを再度実行し、(新しいオブジェクトのため)最後の結果と同じではないことと、異なる角度が無限ループに入り、10ループ後に強制停止することに気付きます。 'data'引数を直接変更してそれを返す必要があります。 Angularはオブジェクト/配列を詳細にチェックするのではなく、単に新しいインスタンスかどうかをチェックします。 –

関連する問題