您好我正在使用Angular 2管道返回对象的键,它是一个不纯的管道并且它被执行多次阻塞其他一些脚本,我怎样才能避免多次执行不纯的管道?我的代码如下:
import {Pipe,PipeTransform} from '@angular/core';
@Pipe({ name: 'NgforObjPipe', pure: true })
export class NgforObjPipe implements PipeTransform {
transform(value, args:string[]):any {
let keys = [];
for (let key in value) {
keys.push({key: key, value: value[key]});
}
console.log('pipeeeeeeeeeeeeeee', keys);
return keys;
}
}
答案 0 :(得分:4)
没有办法阻止这种情况。这是一个不纯的管道。
您可以做的是,确保尽可能少地在transform()
方法内完成工作,例如通过缓存结果并仅在传递的值实际更改时重新计算。
您还可以使用Object.keys()
来获得更高效的代码。
另请参阅How to iterate [object object] using *ngFor in Angular 2
ChangeDetectionStrategy.OnPush
可用于减少更改检测的运行次数,以最大限度地减少对管道的调用次数。
答案 1 :(得分:2)
这可能有两种方法。
Input
传递给组件,并使组件ChangeDetectionStrategy
成为onPush。NgforObjPipe
手动调用其转换方法,从组件本身应用collection
管道NgforObjPipe.tranform()
。