Angular2:将属性名称传递给管道

时间:2016-05-11 08:31:38

标签: angular

在Angular2中,我在下面有一个文本过滤器管道。而不是修复" title",是否可以传入数据被过滤的属性名称?

import {Injectable, Pipe,PipeTransform} from 'angular2/core';

@Pipe({
  name: 'textfilter'
})
@Injectable()
export class TextFilterPipe implements PipeTransform {
  transform(items: any[], args: any[]): any {
    return items.filter(item => item.title.indexOf(args[0]) !== -1);
  }
}

2 个答案:

答案 0 :(得分:3)

RC.x版本

@Pipe({
  name: 'textfilter'
})
export class TextFilterPipe implements PipeTransform {
  transform(items: any[], filterProp, filterValue): any {
    return items.filter(item => item.[filterProp].indexOf(filterValue) !== -1);
  }
}

并像

一样使用它
{{someValue | textfilter:'title':abcde}}

beta.x版

@Pipe({
  name: 'textfilter'
})
export class TextFilterPipe implements PipeTransform {
  transform(items: any[], args: any[]): any {
    return items.filter(item => item.[args[0]].indexOf(args[1]) !== -1);
  }
}

答案 1 :(得分:3)

是的,你可以使用几个参数:

@Pipe({
  name: 'textfilter'
})
export class TextFilterPipe implements PipeTransform {
  transform(items: any[], args: any[]): any {
    var paramName = args[0];
    var paramValue = args[1];
    return items.filter(item => item[paramName].indexOf(paramValue) !== -1);
  }
}

并以这种方式使用它:

someArray | textfilter:title:value

请注意,您不需要将@Injectable装饰器与管道一起使用。