2016-04-06 40 views
1

İki boruyu sırayla nasıl kullanırım? Boole özelliği yanı sıra etiket özelliklerini (birim, görev, alt görev): Belirli Benim parçacığı olarakaçısal 2 sıralı borular

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

bir yer imi var. Yani ne başarmak istediğim ilk boru imi bütün evreleri filtreler yani sonra

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

cevap

2

Aslında yapmak özel bir şey yoktur 2 boru (aşağıda) uygulanır.

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

bir ngFor aşağıdaki ifade kullanılarak: I, [ 'val1', 'val2', 'val3' ] aşağıdaki borular ile bir dizi varsa, örneğin

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

: ikinci boru önceki değeri alır:

#elt of data | pipe1 | pipe2 

data | pipe1[ 'val2', 'val3' ] dönmek ve bizuygularsanız [ 'val3' ] dönecektir Önceki sonuçta.

İlgili plunkr'a bakın: https://plnkr.co/edit/EpKMitR3w89fRiyGYQz7?p=preview.

+0

Merhaba, hızlı cevap için teşekkürler, temelde #elt of data | pipe1 | pipe2 | pipe3 bunun gibi bir şey anlamına mı geliyor? ((#elt of data | pipe1) | pipe2) | boru 3 –

+0

Ayrıca sadece angular.io üzerinde okuduğum boru ile filtreleme listelemek için teşvik ve bu bileşen içinde yapılması gerektiğini okudum. Ancak, kullanıcıların sadece bir kez filtreyi tıkladıkları ve borunun sadece bir kez çağrıldığı durumlarda bu durumun iyi olması gerektiğini düşünüyorum. –

+0

Burada doğru bir yaklaşım olduğunu düşünüyorum. "Saf değil" (durum bilgisi olan) borularınız olduğunda, her zaman bağlamalar güncellendiğinde boru arandığı için biraz farklıdır. Daha fazla bilgi için bu Mark Rajcok'un harika yanıtını görün: http://stackoverflow.com/questions/34456430/ngfor-doesnt-update-data-with-pipe-in-angular2/34497504. Angular.io web sitesindeki bağlantıya ilgi duyarım ;-) –