在订阅事件上没有刷新ChangeDetectorRef的管道

时间:2017-07-17 16:05:33

标签: javascript angular typescript events

我有以下管道:

{{ "value" | translationPipe | async }}


translationPipe {

 constructor(otherService: OtherService, myService: MyService, _ref : ChangeDetectorRef) {
    this.myService.myEventEmitter.subscribe(value -> {
         _ref.markForCheck();
    });
 }

 transform(value, args?) {
    // this returns an api call observable
    return this.otherService.doApiCall();
 }

}

但是,当事件发射器输出事件时,管道的值不会重新获得。

1 个答案:

答案 0 :(得分:1)

角度变化检测检查传递给管道的值和参数是否有变化。如果他们没有改变,调用markForCheck()只会浪费CPU。

解决方法可能是使用pure: false并返回缓存的结果,直到myEventEmitter发出事件。