2016-04-14 10 views
0

私は自分のプロジェクトでangularjsを使用しています。カスタムフィルタを作成する際のトラブルシューティング

ng-repeatで配列をフィルタリングしたいと思います。ここで

はHTMLである:ここでは

<tbody> 
    <tr ng-repeat="sensorData in list.sensorsData | 
           filterByAlert:list.alertTags"> 
     <td> 
      <div class="container-fluid"> 
       <div class="row"> 
        <div class="text-center">{{ sensorData.Area }}</div> 
       </div> 
      </div> 
     </td> 
    </tr> 
</tbody> 

は、オブジェクトのlist.sensorsData配列をどのように見えるかです:ここでは

enter image description here

は、オブジェクトのlist.alertTags配列をどのように見えるかです:

enter image description here

ng-repeat要素に表示する必要があるのは、list.sensorsという行で、list.alertTagsのidプロパティに等しいalertTypeプロパティ値を持つ行です。この目的のために

私はこのフィルタを書いた:

(function() { 
    "use strict"; 

    angular.module("sensorsData").filter('filterByAlert', filterByAlert); 

    function filterByAlert() { 
     var result = []; 
     return function (sensorRecords, alertTypes) { 
      if (!sensorRecords) 
       return; 
      if (!alertTypes) 
       return; 
      angular.forEach(sensorRecords, function (sensorRecord, key) { 
       angular.forEach(alertTypes, function (alertType, key2) { 
        if (sensorRecord.AlertType == alertType.Id) { 
         result.push(sensorRecord); 
        } 
       }) 
      }); 
      return result; 
     } 
    }; 
})(); 

が、フィルタが発射されたとき、私はこのエラーを取得:

angular.js:13424 Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: sensorData in list.sensorsData | 
            filter:filterByAddress | 
            orderBy:sortType:sortReverse | 
            filterByAlert:list.alertTags, Duplicate key: object:8, Duplicate value: {"Id":8,"Address":"125 king g.str","AlertType":3,"Area":"North","MeasureDate":"2012-10-12T16:10:00","MeasureValue":-1} 

私が私のカスタムフィルター内のロジックに問題があるようです。

なぜエラーが出るのですか?それを修正する方法はありますか?

+0

JSON.stringify(結果)を表示できますか? – juvian

+1

データをJSON形式で送信します(画像ではありません)。 – dfsq

+0

@ dfsq、どういう意味ですか? – Michael

答えて

0

あなたのng-repeatにtrack by $indexを追加してください。

<tr ng-repeat="sensorData in list.sensorsData | filterByAlert:list.alertTags track by $index"> 
+0

トラックは常に式の末尾に移動する必要があります – juvian

+0

ああ、あなたの権利 – kabaehr

関連する問題