2016-04-06 17 views
1

Wie verwende ich zwei Rohre nacheinander?eckig 2 sequentielle Rohre

Speziell meine Threads haben ein Lesezeichen: Boolesche Eigenschaft sowie Tag-Eigenschaften (Einheit, Aufgabe, Teilaufgabe). Also, was ich erreichen will ist, dass das erste Rohr alle Themen Filter, die vorgemerkt werden, gelten dann die zweite Leitung (unten)

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; 
     }); 
    } 
    } 
} 

Antwort

2

In der Tat gibt es nichts Besonderes zu tun. Das zweite Rohr wird den Wert aus dem vorherigen erhalten:

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

Zum Beispiel, wenn ich ein Array habe [ 'val1', 'val2', 'val3' ] und mit den folgenden Leitungen:

@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'; 
    }); 
    } 
} 

durch den folgenden Ausdruck in einem ngFor Verwendung:

#elt of data | pipe1 | pipe2 

data | pipe1 wird [ 'val2', 'val3' ] zurückkehren und [ 'val3' ] zurück, wenn wir die 0.123.824 anwendenzum vorherigen Ergebnis.

Siehe die entsprechende Plunkr: https://plnkr.co/edit/EpKMitR3w89fRiyGYQz7?p=preview.

+0

Hallo danke für die schnelle Antwort, also im Grunde #elt von Daten | pipe1 | pipe2 | pipe3 würde so etwas bedeuten? ((#elt von Daten | pipe1) | pipe2) | Pipe 3 –

+0

Auch ich habe gerade auf angular.io gelesen, dass es empfohlen wird, List-Filterung mit Rohren zu tun, und dass es innerhalb der Komponente erfolgen sollte. Aber ich denke in diesem Fall, wo Benutzer nur einmal auf den Filter klicken und die Pipe nur einmal aufgerufen wird, sollte es in Ordnung sein? –

+0

Ich denke, dass es hier der richtige Ansatz ist. Wenn Sie "nicht reine" (stateful) Pipes haben, ist es ein bisschen anders, da die Pipe jedes Mal aufgerufen wird, wenn Bindungen aktualisiert werden. Sehen Sie dieses Mark Rajcoks fantastische Antwort für mehr Details: http://stackoverflow.com/questions/34456430/ngfor-doesnt-update-data-with-pipe-in-angular2/34497504. Ich würde mich für den Link auf der angular.io Website interessieren ;-) –