角度可观察没有获得初始值

时间:2019-06-14 20:23:45

标签: angular rxjs observable

我的屏幕上有三个组件,其中一个是从数据库中提取的列表。这两个等待列表加载。用户可以在其他两个组件之间切换,列表不需要重新加载。

我正在使用服务告知两个组件列表已完成加载。

列表完成后,将显示当前查看的组件。但是,如果用户在列表加载后切换视图,则新视图仍在等待可观察对象触发。

editor.service.ts:

...
private setBusReady = new Subject<boolean>();
...
getBusReady = this.setBusReady.asObservable();
...
busReady(values: boolean = false) {
  this.setBusReady.next(values);
}

list.component.ts(加载后将busReady设置为true)

...
this.editorService.busReady(true);
...

viewer.component.ts(订阅并等待列表)

...
ngOnInit() {
  ...
    this.editorService.getBusReady
    .pipe(
      takeUntil(this.unsubscribe)
    )
    .subscribe(res => {
      if (res) {
        this.loading = !res;
      }
    });
  ...
}
...

带有订阅的视图在加载时没有问题,但在切换时却有问题。我认为我需要切换到可观察的热点,但是我不确定。我尝试使用ConnectableObservable进行此操作,但这会导致其他问题。

1 个答案:

答案 0 :(得分:2)

我认为您应该使用 BehaviourSubject ,因为 Subject 不会在您订阅时保存当前值,而只会在.next(数据被保存的那一刻)触发仅加载)),另一方面, BehaviourSubject 可以保留一个先前值,而所有即将出现的值