用于过滤物体的软管
flexible pipe to filter objects
我正在尝试制作一个柔性管道来过滤我的对象数组以使用 *ngFor
显示它
<div class="wrapper" *ngFor="let item of items | myFilter:property:true">
例如我只想显示 div 为真 属性 的对象:
[
{'name':'first', 'property': 'true'},
{'name':'last', 'property': 'false'}
]
当我尝试像这样动态设置 属性 时似乎不起作用
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'myFilter'
})
export class FilterPipe implements PipeTransform {
transform(items: any[], key: any, value: any): any {
return items.filter(item => item[key] === value ? item : null);
}
}
我也试过这个
item['"' + key + '"']
和这个(使用 es6 模板字符串)
item[`"$key"`]
但是如果我像这样直接调用 属性,这个管道工作得很好
item.property
我真的需要让它更灵活,因为我的应用程序中有很多情况需要按不同的属性值过滤项目
Array.filter
期望您的过滤器函数为 return a boolean
,这意味着您应该为此更改过滤器:
transform(items: any[], key: any, value: any): any {
return items.filter(item => item[key] === value);
}
来源:MDN
你的管道绝对正确,你只是在 HTML 上漏掉了 ''
。尝试这样称呼它:<div class="wrapper" *ngFor="let item of items | myFilter:'property':true">
它将完美地工作。这是因为管道需要一个字符串,但您给出的是一个对象引用。 属性 != 'property'
我正在尝试制作一个柔性管道来过滤我的对象数组以使用 *ngFor
显示它<div class="wrapper" *ngFor="let item of items | myFilter:property:true">
例如我只想显示 div 为真 属性 的对象:
[
{'name':'first', 'property': 'true'},
{'name':'last', 'property': 'false'}
]
当我尝试像这样动态设置 属性 时似乎不起作用
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'myFilter'
})
export class FilterPipe implements PipeTransform {
transform(items: any[], key: any, value: any): any {
return items.filter(item => item[key] === value ? item : null);
}
}
我也试过这个
item['"' + key + '"']
和这个(使用 es6 模板字符串)
item[`"$key"`]
但是如果我像这样直接调用 属性,这个管道工作得很好
item.property
我真的需要让它更灵活,因为我的应用程序中有很多情况需要按不同的属性值过滤项目
Array.filter
期望您的过滤器函数为 return a boolean
,这意味着您应该为此更改过滤器:
transform(items: any[], key: any, value: any): any {
return items.filter(item => item[key] === value);
}
来源:MDN
你的管道绝对正确,你只是在 HTML 上漏掉了 ''
。尝试这样称呼它:<div class="wrapper" *ngFor="let item of items | myFilter:'property':true">
它将完美地工作。这是因为管道需要一个字符串,但您给出的是一个对象引用。 属性 != 'property'