如何从订阅中将数据存储/设置到外部变量并从Angular 7中的其他类中再次读取数据

时间:2019-05-09 09:45:37

标签: angular typescript rxjs

我有一个返回一些数据的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 :(得分:0)

创建一个服务类,并在预订块中使用返回的数据设置服务类变量的值,以便您需要将服务类注入自定义类中以获取数据。

答案 1 :(得分:0)

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...
});