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

问题描述

我有一个返回一些数据的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

标签: angulartypescriptrxjs

解决方案


数据服务.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...
});

推荐阅读