angular - Angular 6 中的可观察实现
问题描述
我一直在努力理解 Angular Observables 但我可以让它工作t 获取用户数据。下面是我的实现
这是用户界面:
interface User{
status:boolean,
username:string,
email:string
}
用户服务:
export class UserService {
private Userr :BehaviorSubject<User>
constructor(private http:HttpClient) {
this.Userr = new BehaviorSubject<User>({
status:false,
username:"",
email:""
});
}
setUser(user:User){
this.Userr.next(user);
}
get getUserData(){
return this.Userr.asObservable();
}
get retrieveData(){
return this.http.get<User>('/api/userdata')
}
}
下面是我的navbar ts 组件实现:
export class NavbarComponent implements OnInit {
isLoggedIn$: Observable<boolean>;
User$ : Observable<User>;
constructor(private authService: AuthService,private router:Router,private
user:UserService) { }
ngOnInit() {
this.isLoggedIn$ = this.authService.getLoggedIn;
this.User$ = this.user.getUserData;
}
}
我没有发布注销功能只专注于获取数据。在导航栏 html 组件中,我必须遵循:
<a class="nav-link" (click)="logout()" routerLink='/welcome'>Welcome
{{User$.username}}!,Log Out!</a>
错误是 User$.username 未定义。谢谢
编辑 对于遇到此问题的任何人,解决方案是获取用户名,如下所示:
{{(User$ | async).username}}!
解决方案
是的,因为 User$ 是可观察的。所以还没有回来。有两种选择:
1){{ (User$ | async).username }}
这是等待可观察的 Angular 语法
2)
export class NavbarComponent implements OnInit {
isLoggedIn$: Observable<boolean>;
User$ : Observable<User>;
user: User = {};
constructor(private authService: AuthService,private router:Router,private
user:UserService) { }
ngOnInit() {
this.isLoggedIn$ = this.authService.getLoggedIn;
this.User$ = this.user.getUserData.subscribe(user => this.user = user);
}
}
{{user.username}}
您可以在 subscribe 方法中等待 observable 并将其分配给用户变量。当它返回时,Angular 将使用用户名的值更新 dom。
推荐阅读
- mysql - 列出费用总和大于平均水平的角色
- reactjs - 如何在反应中访问动态创建的 DOM 元素
- r - 如何将多个单值行绑定到我的 data.frame?
- amazon-web-services - 如何从 s3 文件替换 AWS Glue 作业中的参数值?
- javascript - 如何在反应中使用 webpack 和 web3?
- javascript - JavaScript:使用生成器制作二叉搜索树的顺序迭代器
- android - Azure Pipeline 中的 Flutter Android 构建错误:在 ABI 的 NDK 工具链文件夹中找不到工具链,前缀为:arm-linux-androideabi
- c++ - 通过 const 限定对象调用成员函数会出错,因为函数未标记为 const?
- python - KeyError:“['age'] 不在索引中”
- python - IBM Watson Studio:如何运行使用 .tar.gz 部署的特定文件