我有很多方法需要currentUserId。 我一直在注入我的AuthService来获取和存储用户,如下所示:
// AuthService代码
getAuthorizationState() {
return this.afAuth.authState;
}
// Feed组件代码
constructor(...auth: AuthService...) {
this.user = this.auth.getAthorizationState();
this.user.subscribe(
(value) => {
console.log('value', value);
this.currentUser = value;
}
);
}
// This tends to throw an error can not get property uid of undefined
getUserFeed(uri: string): Obervable<any> {
return this.getFeed(`feed/${this.currentUser.uid})`)
}
// So have been resorting to this
getUserFeed(uri: string): Obervable<any> {
this.user.map((user) => {return user.uid})
.flatMap((currentUserId) => {
return this.getFeed(`feed/${currentUserId})`)
});
}
问题:每个方法都必须这样做。在angularjs中,我记得我相信使用解决方法来帮助解决这个问题。
问题:是否有一种'app global'方式来获取和存储当前经过身份验证的用户的信息,以便在调用组件或注入服务中的方法时它已存在?
答案 0 :(得分:0)
走向角度gitter,并被告知我正在做的可观察链确实是使用的模式。我稍微修改了它,并将重构在服务与组件中使用它。
getHomeFeedPostsWrapper(): Observable<any> {
return getUserId().map((user) => {
return user.uid;
}).switchMap((userId) => {
return this.friendly.getHomeFeedPosts(userId);
});
}
/**
* Helper methods
*/
getUserId() {
return this.auth.getAuthState().map((user) => {
return user.uid;
});
}