gpt4 book ai didi

Angular8 - 可观察的内部服务,如何根据逻辑代码条件通知订阅的组件?

转载 作者:行者123 更新时间:2023-12-02 21:19:25 25 4
gpt4 key购买 nike

我有一个服务公开一个返回 Observable 的函数。在这个服务中,我有一些逻辑应该触发 Observable 上的下一个调用,以便订阅组件应该获取更新的数据。在观察者构造函数期间,我可以调用 next 并且一切正常,但我如何在构造函数之外访问它?

在服务初始化期间我这样做

private currentWheaterData$: Observable<any>;

this.currentWheaterData$ = new Observable(observer => {
observer.next(/* data */);
}

然后在同一服务的其他方法中我希望能够执行类似的操作

this.currentWheaterData$.observer.next(/* fresh data */);

必须有一种方法来发出新数据。

最佳答案

当您想要创建一个保存状态并可供组件使用的共享服务时,您应该使用 BehaviorSubject()以便组件始终接收最新状态。

@Injectable()
export class WeatherService {
private _weather$ = new BehaviorSubject<WeatherData>(null);

public function set(data: WeatherData) {
this._weather$.next(data);
}

public function select(): Observable<WeatherData> {
return this._weather.asObservable();
}
}

上面将发出 null直到天气数据设置完毕。您也可以阻止 observable 发出 null并通过切换到 new ReplaySubject<WeatherData>(1) 强制订阅者等待,直到第一个数据可用。相反。

服务的复杂性可能会增加,并且有多个第三方库可以处理状态管理。两个非常受欢迎的是NgRxNgXs ,但如果您正在做一些小事情并且想要保持简单。尝试我的小型状态服务,它可以与任何前端框架一起使用。

https://github.com/reactgular/stateful

关于Angular8 - 可观察的内部服务,如何根据逻辑代码条件通知订阅的组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58975930/

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