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

时间:2017-07-25 04:37:09

标签: javascript angular typescript

您好我正在使用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;
        }
    }

2 个答案:

答案 0 :(得分:4)

没有办法阻止这种情况。这是一个不纯的管道。

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

您还可以使用Object.keys()来获得更高效的代码。 另请参阅How to iterate [object object] using *ngFor in Angular 2

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

答案 1 :(得分:2)

这可能有两种方法。

  1. 您可以考虑将此Object值作为Input传递给组件,并使组件ChangeDetectionStrategy成为onPush。
  2. 通过NgforObjPipe手动调用其转换方法,从组件本身应用collection管道NgforObjPipe.tranform()