javascript - await 组件之间的数据服务 Angular,行为主题
问题描述
我在 Angular 中有一个 Behavior Subject 数据服务,它在 admin-layout-component 加载(父组件)时向服务器发出请求以获取用户详细信息,然后在用户组件中注入数据,这是我的用户组件 onInit:
ngOnInit(){
this._dataService.currentUserDetails.subscribe(userDetails => this.userDetails = userDetails);
console.log(this.userDetails);
if(this.userDetails === ''){
this.getUser();
}
}
当我在用户组件中刷新浏览器时,首先加载当前组件 ngOnInit,我必须有条件检查 userDetails 并向服务器发出新请求,但 admin-layout-component 也在发出请求,我的问题:有一种等待 dataService 的方法,所以我不必使 getUser() 两次?提前致谢。
解决方案
您可以使用 Subject 来存储有关用户的信息,如果需要,您始终可以通过this.userDetails
组件中的任何位置从主题获取数据:
export class Component implements OnInit {
userDetails$ = new BehaviorSubject<any>(null);
ngOnInit(){
this._dataService.currentUserDetails.subscribe(userDetails => {
this.userDetails.next(userDetails)
});
}
get userDetails(): any {
return this.userDetails$.getValue();
}
}
在模板中,您可以订阅您的服务主题
<div> {{ userDetails$ | async }} </div>
推荐阅读
- java - 使用 java 程序为 ssl 生成证书签名请求
- python - Python - 使用 input() 在控制台中重复输入选项,直到用户选择退出
- regex - 为什么这个 RegEx 不能与 `git grep` 一起使用?
- c# - C# 和 Powershell 加密 Rijndael 传递到相同的输出
- flutter - Github Flutter 登录
- javascript - 如何在对话流的计划时间内自动触发意图
- django - 如何在 html 模板中使用 FilerImageField?
- cuda - 在 cuda 10.0 中的多个 gpus 上运行每个内核函数
- sap-cloud-platform - 主体传播在最新版本的 SAP Cloud SDK 中不起作用
- java - Eclipse neon 的 jframe 调色板中未显示布局类别