我正在对Angular2中的数组实现过滤操作。当元素在数组中发生更改时,不会触发纯管道。因此,我必须使用不纯的管道或使用下面的组件内部的函数进行过滤。
) VALUES ('%s','%s')""" % (element1,element2)
或者,
*ngFor="let item of items | impureFilterPipe"
据我所知,在性能方面,绑定模板中的函数是不好的。但是,我看不出使用不纯的管道而不是功能的任何区别。我想知道的是,这两种方法之间的表现有什么不同吗?
答案 0 :(得分:2)
正如评论中指出的那样,Angular团队自己建议不要使用管道来过滤或排序集合。解释是这些管道将基本上在每个变化检测周期运行,即使收集量很小也会非常昂贵。
标准解决方案是控制何时进行排序操作,如:
TypeError: unsupported operand type(s) for -: 'my_class' and 'int'
*ngFor="let item of filteredItems"
如果您想按需运行它,您也可以将该逻辑包装在自己的函数中。
答案 1 :(得分:1)
不建议使用不纯净的管道。这会影响您的表现。 即使未更改源也将调用它,因此正确的选择是更改返回对象的引用。甚至更好的是将过滤逻辑移到组件级别。
// inside component
someMethod():void{
this.items.push(newItem);
this.items = Object.clone(this.items);
}
@Pipe({
name: 'showfilter'
})
export class ShowPipe {
transform(value) {
return value.filter(item => {
return item.visible == true;
});
}
}