首页 文章

如何在一个可观察的几个订阅

提问于
浏览
3

对不起我的英语不好 . 我有主要模块提供的服务 . 什么时候发生改变 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;
        }
    );
}

在我的情况下,订阅仅在最后订阅的组件上调用 . 如何在我订阅的所有组件中进行订阅调用?

谢谢!

附:你可以在这里看到完整的服务代码:https://github.com/pakhuta/siarhei.pakhuta.angular2/blob/master/src/app/shared/user-settings.service.ts#L41

和订阅:https://github.com/pakhuta/siarhei.pakhuta.angular2/blob/master/src/app/weather/weather.component.ts#L43

1 回答

  • 1

    我的猜测是它是一个计时问题,并且在其他组件订阅之前,observable正在完成 .

    最简单的解决方案是使用 BehaviorSubjectReplaySubject 而不是常规的observable .

    constructor() {
            this.userSettingsObservable =  new ReplaySubject(1);//will only broadcast the last value when subscribed to
        }
    

    然后 :

    this.userSettingsObservable.onNext(settings)
    

相关问题