有一项服务用于读取初始持久值-“ settings ”,并通过可观察的“ settings $ ”将其提供给订户-组件。几个组件使用可观察到的“ settings $ ”来检索初始持久值,并在它们之间进一步交换更新后的值。为此,在服务中实现了BehaviorSubject。在这里一切都很好。
constructor(private settingsService: SettingsService, ...) { ... }
ngOnInit() {
const settingsSubscription = this.settingsService.settings$.subscribe(o =>
{
merge(this.persistedSettings, o);
...
});
...
settingsSubscription.unsubscribe;
}
一个组件也需要初始持久数据,但是不需要有关“设置”中进一步更新的进一步通知。因此,它最初订阅获取初始持久性数据,然后取消订阅以避免得到任何进一步的更新-像这样。
settingsSubscription.unsubscribe;
但是,尽管有以下情况,订阅仍然有效:
settingsService.notifySubscribers(s)
订阅中的部分: { merge(this.persistedSettings,o); ... });
当任何组件使用服务和功能时,总是会触发:
tags
问题是:
“ settingsSubscription.unsubscribe;” 不会取消订阅?
如何解决?
答案 0 :(得分:5)
unsubscribe
是一种方法,而不是属性,因此您需要使用()
,它将变为:
.unsubscribe();
如果目标是订阅并仅获取初始持久数据,则可以使用:take(1)
this.settingsService.settings$.pipe(take(1)).subscribe(...)
它将在获取第一个数据后自动退订。