angular - 订阅行为主题不返回新值
问题描述
我有一个会话详细信息端点,我想在我的应用程序启动时点击它,并且在获取任何此类详细信息之后,我想使用我的应用程序的其余组件可以在需要时检索的行为主题发出一些值。
我创建了一个会话详细信息服务,如下所示:
export class SessionDetailsService {
public currentUser: BehaviorSubject<IUser> = new BehaviorSubject<IUser>(undefined);
constructor(
private http: HttpClient) {
}
public getSession = () => {
return this.http.get<ISessionDetails>('http://localhost:8080/services/sessiondetails').subscribe((sessionDetails) => {
this.currentUser.next(sessionDetails.user ? sessionDetails.user : undefined);
});
}
}
在我的根应用程序组件中ngOnit
,我getSession
在上述服务中调用我的方法。
这确实触发了 HTTP 请求,但是我发现当某个组件加载订阅currentUser
行为主题时,它总是返回一个未定义的值,即使我可以通过调试看到 sessionDetails 响应参数上存在一个用户属性在我的 HTTP 获取订阅回调中,所以我希望this.currentUser.next(sessionDetails.user)
已经进行了调用,以便我对这个值感兴趣的组件将获得完整的用户值。
在我对这个用户价值感兴趣的其他组件中,我订阅了 ngOnit,如下所示:
this.sessionDetailsService.currentUser.subscribe((currentUser) => {
this.userPresent = currentUser !== undefined;
});
如您所知,它只是设置一个标志,但始终设置为 false,因为通过的值仍未定义。
我觉得我在这里误解了一些基本的东西。
谁能协助并解释我哪里出错了?
谢谢。
解决方案
推荐阅读
- c# - 如何将响应作为 URL 从服务器检索到客户端
- codeigniter - 如何正确使用会话检查
- typescript - TypeScript - 使用 HOC 验证对象属性
- python - MacOS - Python 3.7 - DirectX 8 (2003) 应用程序的 GUI 鼠标控制 - 无法模拟鼠标点击,但我可以模拟键盘输入
- javascript - 合并两个 Javascript 对象,其中每个键包含多个值
- javascript - Javascript 对象计算属性
- c# - 如何从基类获取派生类类型
- dart - 根据 DartLangSpec-v2.2,类中的静态和非静态变量可能具有相同的名称
- html - 使用 CSS 倒置挖角
- rspec-rails - 无法测试模块内的类[未初始化的常量] Rspec