首页 > 解决方案 > 从服务的 HTTP 调用返回值以便在父组件中使用的最佳方法?

问题描述

我有一个使用服务的组件,服务内部是对服务器的 HTTP 调用,其中包含有关产品发行说明的数据。发行说明仅作为 JSON 字符串返回。

我希望能够从服务器获取 JSON 值,然后将值从服务返回到首先调用该方法的父类。这样我就可以在父类中使用 JSON 字符串。

我不确定最好的方法是什么。我应该使用带有父类可以访问的 getter 的 BehaviourSubject 吗?如果是这样,我如何调整以下代码以使用行为主题?

服务方式

getLatestReleaseNote() {
    let releaseNoteUrl = this._configService.getConfig().releaseNoteUrl;
    const currentVersion = this.getCurrentVersion();
    releaseNoteUrl += currentVersion.replace(".", "_") + ".json"; 
    const releaseNoteDataStream = this._httpClient.get<string>(releaseNoteUrl).pipe(take(1)); //Need to subscribe or pass to BehaviourSubject
  }

或者,我可以只订阅releaseNoteDataStreamobservable 并从订阅内部返回值吗?像下面这样?

getLatestReleaseNote(): string {
    let releaseNoteUrl = this._configService.getConfig().releaseNoteUrl;
    const currentVersion = this.getCurrentVersion();
    releaseNoteUrl += currentVersion.replace(".", "_") + ".json"; 
    const releaseNoteDataStream = this._httpClient.get<string>(releaseNoteUrl).pipe(take(1)).subscribe(val => 
      {
        return val;
      });
  }

我意识到这是不正确的,但我不确定如何从订阅中返回。

对于第三种选择,我可以在订阅有值时使用 EventEmitter 来发出字符串值吗?

标签: angularrxjs

解决方案


你最好的选择是使用Angular EventEmitter。甚至发射器也用于向父组件发送数据。它们可以是同步的,也可以是异步的,以满足您的需求。

此外,您可以只获取父组件中的发行说明,然后使用@Input()装饰器将其传递给子组件。


推荐阅读