另一个可观察的问题。
我正在使用角度翻译服务和Kendo.UI组件。
根据Kendo.UI documentation,我可以实现一个MessageService来翻译它的组件。
为此,我必须扩展一个包含返回字符串的方法的抽象类:
@Injectable()
export class MyMessageService extends MessageService {
private messages = {'kendo.upload.select': 'initial value'}
constructor(private readonly translate: TranslateService) {
super();
this.translate.get('my_translation_key')
.subscribe((value) => {
this.messages['kendo.upload.select'] = value;
});
}
public get(key: string): string {
return this.messages[key];
}
}
问题是,当kendo注入我的自定义服务时,observable尚未解决,我的按钮永远不会将其值从“初始值”更改为已翻译。
从我的轻描淡写,剑道的服务应该接受一个可观察的,而不是一个字符串。但我对承诺/主题/观察不太熟悉。
有解决方法吗?
ps:我知道TranslateService有一个.instant(key)方法,但是同样的方法,这些值还没有加载。
答案 0 :(得分:0)
听起来你说它是在剑道订阅之前推出的observable。如果是这种情况,则应该使用ReplaySubject而不是Observable,因为Replaysubject会在订阅时将所有给observable的值推送到订阅者。您可以告诉它要重播多少观察值。
此外,您可以尝试在查看init或甚至OnInint之后调用您的服务器。建议不要在构造函数中调用服务,因为视图未完成渲染,并且可能尚未设置任何html异步管道。最坏的情况是你可以使用重播主题。