Angular 在登录时强制刷新用户名2+;
我在标题组件中有一个导航栏,它在所有路由上共享。 我希望当前用户的用户名在登录时显示在导航栏上。我已经让这个工作,但目前在用户登录后,我必须手动刷新页面之前,用户名出现 在我的应用程序中,登录系统是基于令牌的。当用户登录时,用户名和令牌保存在本地存储中。我可以检查登录后是否发生这种情况,但由于登录时不需要刷新标题,因此它不会显示用户名。如果我在登录后重新加载页面,标题将正确显示用户名 当用户登录时,如何强制header组件从auth服务获取用户名 从标题组件--Angular 在登录时强制刷新用户名2+;,angular,Angular,我在标题组件中有一个导航栏,它在所有路由上共享。 我希望当前用户的用户名在登录时显示在导航栏上。我已经让这个工作,但目前在用户登录后,我必须手动刷新页面之前,用户名出现 在我的应用程序中,登录系统是基于令牌的。当用户登录时,用户名和令牌保存在本地存储中。我可以检查登录后是否发生这种情况,但由于登录时不需要刷新标题,因此它不会显示用户名。如果我在登录后重新加载页面,标题将正确显示用户名 当用户登录时,如何强制header组件从auth服务获取用户名 从标题组件-- 导出类HeaderCompone
导出类HeaderComponent实现OnInit{
私有用户:用户;
建造师(
公共授权:授权服务,
私人警报服务:警报服务
) {
this.currentUser=auth.getCurrentUserName();
}
恩戈尼尼特(){
}
}
身份验证服务
@Injectable()
导出类身份验证服务{
公共令牌:字符串;
构造函数(专用http:HttpClient){
公共getCurrentUserId(){
if(localStorage.getItem('currentUser')){
返回JSON.parse(localStorage.getItem('currentUser')).id;
}否则返回“”;
}
我建议您使用可观察的:
@Injectable()
export class AuthService {
private _currentUser: BehaviorSubject<string>;
constructor() {
this._currentUser = new BehaviorSubject("");
}
getCurrentUser(): Observable<string> {
return this._currentUser.asObservable();
}
setUser(user: string) {
this._currentUser.next(user);
}
我所需要做的就是在模板中直接使用auth服务中的函数,而不是首先设置局部变量
{{auth.getCurrentUserName()}}
...
通常的方式是订阅某种形式的通知/观察。有人能解释为什么这比我现在做的更好吗?
export class HeaderComponent implements OnInit {
private currentUser: User;
constructor(
public auth: AuthService,
private alertService: AlertService
) {
this.currentUser = auth.getCurrentUser()
.subscribe(user => this.currentUser = user);
}
ngOnInit() {
}
}