2016-04-06 11 views
1

どのように2本のパイプを連続して使用しますか?ブール型プロパティだけでなく、タグのプロパティ(ユニット、タスク、サブタスク):特定の私のスレッドで角2の連続パイプ

<div class="thread" *ngFor="thread of threadlist | bookmarkPipe | threadPipe"></div> 

は、ブックマークを持っています。実際に それでは、私が達成したいことは、最初のパイプがブックマークされているすべてのスレッドをフィルタリングすることで、その後(下)第二のパイプを適用

export class ThreadPipe implements PipeTransform{ 

    transform(array:Thread[], [unit,task,subtask]):any{ 

    //See all Threads 
    if(unit == 0 && task == 0 && subtask == 0){ 
     return array 
    } 
    //See selected Units only 
    if(unit != 0 && task == 0 && subtask == 0){ 
     return array.filter(thread => { 
     return thread.unit === unit; 
     }); 
    } 
    //See selected Units and Tasks 
    if (unit != 0 && task != 0 && subtask == 0){ 
     return array.filter(thread => { 
     return thread.unit === unit && thread.task === task; 
     }); 
    } 
    // See selected units, tasks, subtask 
    if (unit != 0 && task != 0 && subtask != 0){ 
     return array.filter(thread => { 
     return thread.unit === unit && thread.task === task && thread.subtask === subtask; 
     }); 
    } 
    } 
} 

答えて

2

、行うには特別なものは何もありません。

@Pipe({ 
    name:'pipe1' 
}) 
export class Pipe1 { 
    transform(data) { 
    return data.filter((d) => { 
     return d!= 'val1'; 
    }); 
    } 
} 

@Pipe({ 
    name:'pipe2' 
}) 
export class Pipe2 { 
    transform(data) { 
    return data.filter((d) => { 
     return d!= 'val2'; 
    }); 
    } 
} 
ngFor

で次式を用いて:私は[ 'val1', 'val2', 'val3' ]と次のパイプの配列を有する場合、例えば

data -> Pipe1 -> filtered data (#1) -> Pipe2 -> filtered data (#2) 

:第二の管は、前のからの値を受け取ります。

#elt of data | pipe1 | pipe2 

data | pipe1[ 'val2', 'val3' ]を返し、我々はを適用した場合[ 'val3' ]を返します。を前の結果に戻します。

対応するplunkr:https://plnkr.co/edit/EpKMitR3w89fRiyGYQz7?p=previewを参照してください。

+0

こんにちは、お返事ありがとうございます。パイプ1 |パイプ2 | pipe3はこれのようなものを意味するでしょうか? ((#データのデータ|パイプ1)|パイプ2)| pipe 3 –

+0

また、angle.ioを読んだだけで、パイプでリストフィルタリングをすることが奨励され、コンポーネント内部で行うべきであることがわかりました。しかし、私はこの場合、ユーザーがフィルタを一度クリックするだけで、パイプは一度だけ呼び出されると思います。 –

+0

ここは正しいアプローチだと思います。あなたは "純粋ではない"(ステートフルな)パイプを持っているときには、バインディングが更新されるたびにパイプが呼び出されるため、少し違っています。詳細については、Mark Rajcokの素晴らしい回答をご覧ください:http://stackoverflow.com/questions/34456430/ngfor-doesnt-update-data-with-pipe-in​​-angular2/34497504私は、angle.ioウェブサイトのリンクに興味があります;-) –