2017-11-04 4 views
0

現在、パイプを使用してユーザーのテーブルをフィルタリングしようとしています。私はそれを1つの選択のために働かせるが、私は複数の選択にそれを拡張しようとしている。これはテーブルの1つの列だけに留意してください。現時点では、Adam、Brenda、Dan、Harryのようなユーザーの列があります。この列は同じ名前の倍数でもいいと思います。複数の値を持つ角2のフィルタパイプ

import * as _ from 'lodash'; 
import {Pipe, PipeTransform} from '@angular/core'; 

@Pipe({ 
name: 'dataFilter' 
}) 
export class DataFilterPipe implements PipeTransform { 

transform(array: any[], query: string): any { 
if (query) { 
    return _.filter(array, row=>row.user.indexOf(query) > -1); 
} 
return array; 
} 
} 

そして、私のHTMLは単純です::次のように私の現在のパイプの実装がある

<table [mfData]="tableData | dataFilter : filterQuery" #mf="mfDataTable"> 

filterQueryは単なる文字列です。基本的には、filterQueryに名前の配列を渡して、それに基づいて値を返すことです。 [「アダム」、「ハリー」]

  • アダム、アダム、ブレンダ、ダン、ハリー、ハリー、ハリー

と私はfilterQueryで渡さ:だからユーザー列の列が持っていたと言うことができます私は戻ってになるだろう:

  • アダム、アダム、ハリー、ハリー、ハリー

これを達成するためにコードを変更することで任意の助けをいただければ幸いです!私はクエリで変換関数でいくつかのループを実行しようとしました:string []しかし、まだ運がありません。

ありがとうございます!

+0

可能な複製(https://stackoverflow.com/questions/45267001/how [選択ドロップダウン値に基づいて、\ * ngFor結果をフィルタリングする方法]選択されたドロップダウン値に基づいて結果をフィルタリングする) – Aravind

答えて

0

私はこのパイプを経由して動作するようになった:

export class DataFilterPipe implements PipeTransform { 
transform(array[], query:string[]):any[] { 
if (typeof array === 'object') { 
    var resultArray = []; 
    if (query.length === 0) { 
    resultArray = array; 
    } 
    else { 
    resultArray = (array.filter(function (a) { 
     return ~this.indexOf(a.user); 
    }, query)); 
    } 
    return resultArray; 
} 
else { 
    return null; 
    } 
} 
} 
関連する問題