Как сохранить / установить данные во внешнюю переменную из подписки и снова прочитать ее из другого класса в Angular 7 - PullRequest
0 голосов
/ 09 мая 2019

У меня есть http-ответ, который возвращает некоторые данные, я хочу сохранить эти данные во внешней переменной и снова прочитать их из внешнего класса,

myExternalVar: any
loadData(id: string) {
  merge()
    .pipe(
      startWith({}),
      switchMap(() => {
        return this.myService!.getData(id);
      }),
      map(data => {
        return data;
      }),
      catchError(() => {
        return observableOf([]);
      })
    )
    .subscribe(data => {
      this.myExternalVar = data
    });
}

, поэтому я пытаюсь сделать следующее:вызвать myExternalVar из другого класса

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

data.service.ts

import { BehaviorSubject, Observable } from 'rxjs';

private data$ = new BehaviorSubject<any>(null);
data: Observable<any> = this.data$.asObservable();

setData(newData: any){
    this.data$.next(newData);
}

в вашем классе, где вы написали свою функцию

constructor(...data service...) { }

loadData(id: string) {
  merge()
    .pipe(
      startWith({}),
      switchMap(() => {
        return this.myService!.getData(id);
      }),
      map(data => {
        return data;
      }),
      catchError(() => {
        this.dataService.setData(observableOf([]));
        return observableOf([]);
      })
    )
    .subscribe(data => {
        this.dataService.setData(data);
    });
}

в том месте, куда вы хотите попасть в myExternalVar

constructor(...data service...) { }

this.dataService.data.subscribe(myExternalVar => {
   ... do something here...
});
0 голосов
/ 09 мая 2019

создайте класс обслуживания, и внутри блока подписки установите значение переменной класса обслуживания с возвращенными данными, чтобы вам нужно было внедрить класс обслуживания в свой пользовательский класс для получения данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...