我们的Angular2应用程序正在使用翻译服务来提供翻译,例如
getResourceValue(resKey: string): string {
return this.translateService.getResourceValue(resKey);
}
服务从加载了每个组件的API调用中获取转换异步。一个observable正在保持所有的翻译异步。如果该密钥的转换尚未就绪,则只返回密钥。然后在翻译准备好时用正确的字符串更新它。
模板中的:
getResourceValue('Page-Title')
哪个工作正常。
但是有些页面有“ChangeDetectionStrategy.OnPush”。当翻译数据发生变化时,这些页面不会触发变化检测。一切都没有那个设置。
我的问题是:有没有办法强制检测某处仅用于翻译?
答案 0 :(得分:1)
感谢angular2localization,通过传递ChangeDetectorRef解决了这个问题:
在服务中,我们有一个函数来加载传入的Json文件和一个ChangeDetectorRef对象:
getTranslation(resPath: string, changeDetector?: ChangeDetectorRef): Observable<any> {
return Observable.of(this.processTranslation(resPath, changeDetector));
}
}
转换完成后,changeDetector将调用markForCheck mothod;
在需要翻译的每个组件中,我们将调用此函数并传入此组件的changeDetector。
这很好地解决了这个问题。
希望这可以帮助某人。