我有一个父组件,它有一个子组件,我想根据我从 api 获得的用户语言翻译文本。
这是我的翻译管道变换方法:
transform(value : string, args: any[]) : any
{
if (!value) return ;
return this._translationService.translate(value) ;
}
翻译服务
export class TranslationService {
private _currentLang: string = 'en';
public use(langId: number): void {
this._currentLang = langId == 0 ? 'fr' : 'en';
}
public translate(key: string) {
//tranlsation happens here
}
}
这是父组件,它在 ngOnInit() 中获取 langId
ngOnInit() : void
{
this._langService.getLanguageId(this.userId)
.subscribe( langId=> { this._translationService.use(langId); });
}
}
在父子组件模板中,我会这样使用管道:
<div >{{ 'Caption_Key' | translation }}</div>
子组件在设置翻译服务的 langId 之前翻译字幕。但是,父组件翻译工作正常。我看到调用是异步的,但是我如何确保子组件在转换发生之前具有正确的语言。
我尝试在服务中调用use(langId)EventEmitter
时使用并发出事件,然后让管道订阅该事件,但这不起作用......