2017-03-19 32 views
1

在项目中,我有一个自定义管道过滤列表:使用自定义管道和异步管一起

@Pipe({name: 'filterList'}) 
export class FilterListPipe implements PipeTransform { 
    transform(value: string[], arg: string[]): any { 
    if (!value) return value; 
    return value.filter(el => !arg.includes(el)); 
    } 
} 

我使用这条管道如下:

<md-select placeholder="Grupos" (change)="changeGroup($event)"> 
    <md-option 
    *ngFor="let group of (allGroups | async) | filterList : (userDetail | async)?.groups" 
    [value]="group"> 
    {{ group }} 
    </md-option> 
</md-select> 

的问题是我收到的FilterListPipe引发的错误:

arg为null

所以这是行不通的:

let group of (allGroups | async) | filterList : (userDetail | async)?.groups 

我可以以某种方式使用异步的结果作为我的自定义管的参数传递? 或者我应该订阅观察到在我的课,并创建另一个类变量?

回答

3

我解决了我的问题:

我不得不把我的自定义管道放在异步管道之前。就像这样:

*ngFor="let group of allGroups | filterList : (userDetail | async)?.groups | async" 

,现在在等转换函数的第一个参数的值是可观察到的,因此:使用自定义管道异步意味着您要变换观察的/承诺认购前,这是之前

@Pipe({name: 'filterList'}) 
export class FilterListPipe implements PipeTransform { 
    transform(value: Observable<any>, arg: string[]): any { 
     return value 
      .map(groups => groups.filter(el=> !arg.includes(el))); 
    } 
} 
+0

由异步管道完成,在自定义管道之前传递异步意味着首先观察者已订阅,并且您正在使用管道 – Jassi