抱歉我的英文。我有主要模块提供的服务。如果确实发生了使用this.userSettings
方法更改setSettings
对象,我希望调用userSettingsObservable
上的所有订阅者。订阅通过此服务中的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;
}
);
}
在我的情况下,订阅仅在最后订阅的组件上调用。 如何在我订阅的所有组件中进行订阅调用?
谢谢!
P.S。您可以在此处查看完整的服务代码:https://github.com/pakhuta/siarhei.pakhuta.angular2/blob/master/src/app/shared/user-settings.service.ts#L41
答案 0 :(得分:1)
我的猜测是,它是一个计时问题,并且observable在其他组件订阅之前完成。
最简单的解决方案是使用<ion-input type="text" placeholder="rechercher" [(ngModel)]="findItem" (input)='findContact($event.target.value)'>
或BehaviorSubject
而不是常规的observable。
ReplaySubject
然后:
constructor() {
this.userSettingsObservable = new ReplaySubject(1);//will only broadcast the last value when subscribed to
}