主模块中提供了一项服务。这个想法是,当通过 setSettings 方法更改 this.userSettings 对象时,观察者的订阅者将获得一个新对象(对该对象的新引用)。签名通过调用此服务的 getSettingsObservable 方法发生在不同的组件中。
constructor() {
this.userSettingsObservable = new Observable((observer: Observer<UserSettings>) => {
this.userSettingsObserver = observer;
});
}
getSettingsObservable() {
return this.userSettingsObservable;
}
setSettings(path: string) {
this.userSettings = _.set(this.userSettings, path, value);
this.userSettingsObserver.next(_.clone(this.userSettings));
}
组件中 Observable 的签名示例:
ngOnInit() {
this.userSettingsService.getSettingsObservable().subscribe(
(userSettings) => {
this.userSettings = userSettings;
}
);
}
问题是订阅只在一个组件中触发,即最后一个订阅的组件。如何使一切正常?
谢谢
如果有帮助,这里是服务代码:https ://github.com/pakhuta/siarhei.pakhuta.angular2/blob/master/src/app/shared/user-settings.service.ts#L41
这是订阅 Observable 的地方之一(这是有效的):https ://github.com/pakhuta/siarhei.pakhuta.angular2/blob/master/src/app/weather/weather.component.ts#L43
stackoverflow 用英文提出了完全相同的问题:https ://stackoverflow.com/questions/41491808/how-did-several-subscription-on-one-observable
他们建议使用 BehaviorSubject 而不是 Observable
一切都着火了))))所有订户都在工作!