Angular 2で複数のパイプを同時に

Angular 2のプロジェクトに取り組んでいます。

複数のカラムを持つテーブルがあります。各カラムには、ソートのための異なるロジック(数値、string.lowercase、%およびINRのamountValue)があります。行は、そのカラムのソート・ロジックに基づいてソートされます。これを実現するために、私はいくつかの引数を持つsortTableという名前のカスタムパイプを使用しています。

同時に、上部にsearchTerm変数にバインドする入力フィールドがあります。searchTermでデータをフィルタリングするために、sortTableRowという別のカスタムパイプを使用しています。

非常に複雑ですが、非常に単純化されたスニペットです。

<input type="search" [(ngModel)]="searchTerm"/>

<table>
  <thead>
    <tr class="sortable-header">
        <th data-key="status" data-dt="boolean">Status</th>
        <th data-key="name" data-dt="string">Name</th>
        <th data-key="code" data-dt="string">Code</th>
        <th data-key="amountValue" data-dt="amount">Amount</th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let row of rows | sortTable: sortType : {'key': key, 'dt': dt} | searchTableRow : searchTerm : ['name']">
        <td> {{row.status}} </td>
        <td> {{row.name}} </a> </td>
        <td> {{row.code}} </td> 
        <td> {{row.amountValue}} </td>
    </tr>
  </tbody>
</table>

どちらのパイプも個別には問題なく動作しています。カラムのヘッダーをクリックすると、クリックイベントハンドラでキーとdt(dataType)が変更され、それに応じて行がソートされます。ある単語を検索すると、結果がフィルタリングされ、目的の出力が表示されます。

しかし、FILTERED RESULTS (by searchTerm)をソートしようとすると、何も起こりません。この場合、2つのパイプが同時に機能していないのだと思います。私はこれらのパイプのいずれかを削除したくありません。

うーん、不思議だ。

<tr *ngFor="let row of (rows | sortTable: sortType : {'key': key, 'dt': dt}) | searchTableRow : searchTerm : ['name']">

もしそうでなければ、各パイプに console.log を設定し、それらが何を返すか見てみましょう。

解説 (0)

パイプサインを使用して、パイプを適用することができます。 のように `` lang-js <div class="checkbox" *ngFor="let value of brand | filter:{名前:searchbrand}。| itemdisplayno: displayitems; let i = index">


ここでは、2つのパイプを使っています。
1つはパス値でフィルタを呼び出すもの
2つ目はitemdisplaynoです。
基本的には、まずパス値でフィルタを適用し、次にitemdisplaynoを実行します。
解説 (0)

これは、最初にリストをソートしてから、フィルタリングを適用しているために起こります。 この問題を解決するには、HTMLコードの中で、フィルターパイプをソートパイプの前に移動させるだけでよいのです。

`<tr *ngFor="let row of (rows | searchTableRow : searchTerm : ['name']) | sortTable: sortType : {'key': key, 'dt': dt}">`
解説 (0)