Angular 如何检查可观察值是否以角度填充?

Angular 如何检查可观察值是否以角度填充?,angular,rxjs,observable,Angular,Rxjs,Observable,我希望通过一个HTTP请求在应用程序中集中加载一些数据,并希望将这些数据传递给多个单独的组件。我正在使用Behavior Subject类设置加载到共享服务中的可观察对象中的数据,并在单个组件中订阅它 共享服务: data: Observable<any>; load_data(){ this.http.post('/myAPIMethod', {myInputs}).subscribe( res => { var data

我希望通过一个HTTP请求在应用程序中集中加载一些数据,并希望将这些数据传递给多个单独的组件。我正在使用Behavior Subject类设置加载到共享服务中的可观察对象中的数据,并在单个组件中订阅它

共享服务:

  data: Observable<any>;

  load_data(){
  this.http.post('/myAPIMethod', {myInputs}).subscribe(
      res => {
              var dataSource=new BehaviorSubject(res);
              this.data = dataSource.asObservable();
          }, error => {
          console.log(error);
      });
  }
myComponent.component.ts

constructor(private shared: SharedService) { }
ngAfterViewInit(){
  this.shared.data.subscribe(
      res => {console.log(res)},
      err => {console.log(err)}
    );
}
由于我的app.component.ts和myComponent.component.ts文件是异步独立加载的,因此,即使在应用程序加载数据之前,当它尝试订阅myComponent中可观察到的“数据”时,我也会收到一个错误。我收到一个未定义错误的订阅(“数据”未定义,它已经在尝试订阅)

在myComponent文件中订阅“数据”可观察值之前,如何检查已设置的“数据”可观察值?

请改用:

这样,组件可以在返回数据之前订阅
主题
,并在收到http调用时发出数据

此外,如果您不打算在subscribe函数中操作DOM/View元素,则在
ngOnInit
内部调用它: yourComponet.ts

ngOnInit(){
  this.shared.data.subscribe(
      res => {console.log(res)},
      err => {console.log(err)}
    );

成功了。因此,基于此,主体在初始化时发出,甚至在没有赋值(新主体行)时也会发出,而可观察的主体在访问之前实际上需要设置一些值?我的理解正确吗?两者都可以在返回数据之前订阅,不同的主题将多播数据,而可观察的主题将单播itI使用的主题,因为我认为您打算多播数据,但如果不是,您可以在
加载数据()
中返回此.http.post('/myAPIMethod',{myInputs}),然后在组件中订阅它好吧,那么我得到的错误一定是因为observable已经在其他组件中被调用了,所以进行相同调用的第二个组件不能再加载数据了,对吗?现在使用Subject,因为它是多播的,所以它能够并行地在多个组件中加载它,对吗?是的,我的意图是调用多个组件。
data = new Subject();

load_data(){
  this.http.post('/myAPIMethod', {myInputs}).subscribe(
      res => {
              this.data.next(res);
          }, error => {
          console.log(error);
      });
}
ngOnInit(){
  this.shared.data.subscribe(
      res => {console.log(res)},
      err => {console.log(err)}
    );