使用更改检测策略作为OnPush从服务强制更改检测

时间:2017-01-31 18:44:43

标签: angular2-services angular2-changedetection

我们的Angular2应用程序正在使用翻译服务来提供翻译,例如

getResourceValue(resKey: string): string {
  return this.translateService.getResourceValue(resKey);
}

服务从加载了每个组件的API调用中获取转换异步。一个observable正在保持所有的翻译异步。如果该密钥的转换尚未就绪,则只返回密钥。然后在翻译准备好时用正确的字符串更新它。

模板中的

getResourceValue('Page-Title')

哪个工作正常。

但是有些页面有“ChangeDetectionStrategy.OnPush”。当翻译数据发生变化时,这些页面不会触发变化检测。一切都没有那个设置。

我的问题是:有没有办法强制检测某处仅用于翻译?

1 个答案:

答案 0 :(得分:1)

感谢angular2localization,通过传递ChangeDetectorRef解决了这个问题:

在服务中,我们有一个函数来加载传入的Json文件和一个ChangeDetectorRef对象:

getTranslation(resPath: string, changeDetector?: ChangeDetectorRef): Observable<any> {
    return Observable.of(this.processTranslation(resPath, changeDetector));
    }
}

转换完成后,changeDetector将调用markForCheck mothod;

在需要翻译的每个组件中,我们将调用此函数并传入此组件的changeDetector。

这很好地解决了这个问题。

希望这可以帮助某人。