Angular中用函数调用初始化BehaviorSubject的问题与解决办法
Angular 组件间共享HTTP数据同步更新:BehaviorSubject初始值问题解决
问题场景
需要实现一个Angular服务,向两个组件同步分发数据:两个组件可同时展示数据,且任意一方修改数据后,双方的展示都会同步更新。选择用BehaviorSubject存储和分发共享数据,数据通过http.get请求获取。
核心问题:BehaviorSubject必须传入初始值,但不想硬编码,尝试通过函数调用获取初始值时出错。
尝试的代码及错误
尝试直接将返回Observable的函数作为初始值传入:
private selectedPersonSubject = new BehaviorSubject<Person>(this.getPerson(1)); getPerson(id: number):Observable<Person>{ return this.http.get(baseUrl + id).pipe(map(data => data as Person)); }
触发错误:
Argument of type 'Observable
' is not assignable to parameter of type 'Person'
前期尝试的其他方案
- 考虑在构造函数中订阅
getPerson获取Person对象,但无法解决BehaviorSubject的初始值问题 - 试过用
null初始化,但一开始认为不可行;硬编码初始值不符合需求
已实现的解决方案
最终采用null作为初始值初始化BehaviorSubject,代码如下:
public selectedPersonSubject = new BehaviorSubject<any>(null);
实际验证可行,之前的思路过于复杂,虽然可能存在更简洁的写法,但当前方案能满足需求。
内容的提问来源于stack exchange,提问作者Evis
相关产品推荐
相关产品推荐

