我的屏幕上有三个组件,其中一个是从数据库中提取的列表。这两个等待列表加载。用户可以在其他两个组件之间切换,列表不需要重新加载。
我正在使用服务告知两个组件列表已完成加载。
列表完成后,将显示当前查看的组件。但是,如果用户在列表加载后切换视图,则新视图仍在等待可观察对象触发。
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
进行此操作,但这会导致其他问题。
答案 0 :(得分:2)
我认为您应该使用 BehaviourSubject ,因为 Subject 不会在您订阅时保存当前值,而只会在.next(数据被保存的那一刻)触发仅加载)),另一方面, BehaviourSubject 可以保留一个先前值,而所有即将出现的值