フィルタのオブジェクトに変換を適用しようとしています。その結果、新しいオブジェクトの配列が返されます。これは、変換が適用された後にオブジェクトをフィルタリングし、変換の結果を表示するためです。しかし、私が表示するオブジェクトは、($$ids
を比較すると)入れたオブジェクトとは異なるため、無限のダイジェストになります。AngularJs - ng新しいオブジェクトを返すフィルタを使用して返す
track by item.id
のような追跡式を使用して変換したオブジェクトのそれぞれに、元のオブジェクトのids
を割り当てます。これは以下の通りを解決するために私の考え。すべてのオブジェクトに現在id
が含まれていますが、フィルタはあまり一般的ではなく、id
である必要があります。変換はid
(上書きされます)などに設定してはいけません。変換オブジェクトに元のオブジェクトの
$$id
を割り当てます。これは私の理解に基づいて、ハックアップしているようです$$id
は読んでいると仮定されています。変換のフィルタリングの結果に基づいて元のオブジェクトのサブセットを返します。これは、変換がフィルタと表示式の両方に適用される必要があるため、変換された/フィルタ処理されたアイテムをループバックして、元のものを選択して戻す必要があるため、パフォーマンスの問題を引き起こす可能性があります。
<tr ng-repeat="item in list.items | ui.filter.transformFilter:list.transformerFunction:list.search" ng-click="list.select({'item': item})" class="list-item"> <td ng-repeat="label in list.labels" ng-bind-html="item[label.key]"></td> </tr>
ああ、元のオブジェクトを返します
ngClick
理想的に、私は次のことができます。listModule.filter('ui.filter.transformFilter', ['$filter', '$id', function($filter, $id) { var Filter = $filter('filter'); return function(objects, transformer, expression) { // precondition- we need a list of objects if (!_.isArray(objects)) { return objects; } var transformed = []; for (var i = 0; i < objects.length; i++) { transformed[i] = transformer(objects[i]); } return filtered = Filter(transformed, expression); } }] );
そして、ここでは、私はそれを使用しようとしています方法です。ここで
はフィルタであり、それを見るために常に関数をラップします。
Fiddle?プランカ? – Stewie
私は解決策を知っていると思います:)私はそれに取り組んでいます。 – m59
'list.labels'のサンプルデータがありますか? – m59