Обновите наблюдаемое значение по запросу API - PullRequest
0 голосов
/ 20 апреля 2020

Я использую наблюдаемое для передачи значений из API. Теперь в компоненте, на который он подписан, я хочу обновить наблюдаемое значение некоторого события.

Я не могу понять, как это сделать.

Ниже приведен код в службе class

 cacheSettingsData$: Observable<any>;

     public getUserSettings() {
        if (!this.cacheSettingsData$) {
          this.cacheSettingsData$.next(this.requestUserSettings());
          this.userSettings = this.cacheSettingsData$;
        }
        return this.cacheSettingsData$;
      }

RequestUserSettings выполняет вызов API и возвращает значение

requestUserSettings(): Observable<any> {

    let httpHeader = {
      headers: new HttpHeaders({
        'Content-Type': 'application/x-www-form-urlencoded'
      })
    };
    return this.http.get(userSettUrl, httpHeader).pipe(
      map((response) => Object(response['settings'])),
      catchError(error => this.handleError(error)), shareReplay()
    );

Теперь в компоненте, где подписан getUserSettings , как я могу обновить значение Пожалуйста, руководство!

Спасибо Shruti Nair

из наблюдаемого *1013* cacheSettingsData $ для какого-либо события, например, при нажатии кнопки?

1 Ответ

0 голосов
/ 20 апреля 2020

Если я правильно понял, вы хотите сохранить на this.userSettings результат значения, испускаемого наблюдаемой, возвращаемого requestUserSettings(). Поскольку ваш requestUserSettings() возвращает поток, и вы хотите получить эти значения в cacheSettingsData$, чтобы затем установить эти значения на this.useSettings. Я думаю, вам даже не нужен this.cacheSettingsData $, потому что похоже, что вы просто хотите загрузить пользовательские настройки один раз и кэшировать их на this.userSettings. Поэтому я бы предложил что-то вроде этого

// in this case this method name is not the best
public getUserSettings() {
    if (!this.userSettings) {
        this.requestUserSettings().subscribe(settings => {
            this.userSettings = settings
        })
    }
}

Конечно, я не знаю контекст вашего проекта, поэтому вам решать, что лучше соответствует вашим требованиям.

...