gpt4 book ai didi

angular - 一个 Observable 上的多个订阅是如何实现的

转载 作者:太空狗 更新时间:2023-10-29 19:30:00 25 4
gpt4 key购买 nike

对不起我的英语。我有在主模块中提供的服务。何时使用 setSettings 方法更改 this.userSettings 对象我希望调用 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

最佳答案

我的猜测是这是一个时间问题,可观察对象在其他组件订阅之前完成。

最简单的解决方案是使用 BehaviorSubjectReplaySubject 而不是常规的可观察对象。

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

然后:

this.userSettingsObservable.onNext(settings)

关于angular - 一个 Observable 上的多个订阅是如何实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41491808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com