如何避免在角度2中多次执行不纯的管道?

Shi*_*ath 5 javascript typescript angular

嗨我使用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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 4

没有办法阻止这种情况。这就是不纯管道的用途。

您可以做的是,确保在方法内部完成transform()尽可能少的工作,例如通过缓存结果并仅在传递的值实际更改时重新计算。

您还可以使用它Object.keys()来获得更高效的代码。另请参阅如何在 Angular 2 中使用 *ngFor 迭代 [object object]

ChangeDetectionStrategy.OnPush可用于减少运行更改检测的次数,以最大程度地减少对管道的调用次数。