我需要返回一个String但只有一个Observable

时间:2018-02-01 04:14:22

标签: javascript angular observable kendo-ui-angular2

另一个可观察的问题。

我正在使用角度翻译服务和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)方法,但是同样的方法,这些值还没有加载。

1 个答案:

答案 0 :(得分:0)

听起来你说它是在剑道订阅之前推出的observable。如果是这种情况,则应该使用ReplaySubject而不是Observable,因为Replaysubject会在订阅时将所有给observable的值推送到订阅者。您可以告诉它要重播多少观察值。

此外,您可以尝试在查看init或甚至OnInint之后调用您的服务器。建议不要在构造函数中调用服务,因为视图未完成渲染,并且可能尚未设置任何html异步管道。最坏的情况是你可以使用重播主题。