角度 - 不纯管道与功能

时间:2018-06-18 08:48:37

标签: angular data-binding angular-pipe angular-changedetection

我正在对Angular2中的数组实现过滤操作。当元素在数组中发生更改时,不会触发纯管道。因此,我必须使用不纯的管道或使用下面的组件内部的函数进行过滤。

) VALUES ('%s','%s')""" % (element1,element2)

或者,

*ngFor="let item of items | impureFilterPipe"

据我所知,在性能方面,绑定模板中的函数是不好的。但是,我看不出使用不纯的管道而不是功能的任何区别。我想知道的是,这两种方法之间的表现有什么不同吗?

2 个答案:

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