Значение localstorage видно только после перезагрузки страницы
Когда пользователь входит в систему, я хочу отобразить имя пользователя этого пользователя на панели навигации. Я установил токен и имя пользователя в localStorage после успешного входа пользователя. Моя проблема в том, что имя пользователя не отображается на панели навигации, пока я не обновлю страницу.
Я не уверен, как я могу решить эту проблему.
Кто-нибудь может мне помочь
Благодарю вас.
компонент входа
onSubmit = function () {
this.userService.loginUser(this.loginUserData).subscribe(
res => {
this.tokenService.handle(res);
this.authService.changeAuthStatus(true);
},
error => console.log(error)
);
}
аутентификация
export class AuthService {
private loggedIn = new BehaviorSubject<boolean>(this._tokenService.loggedIn());
authStatus = this.loggedIn.asObservable();
user = this.tokenService.getUser();
changeAuthStatus(value: boolean) {
this.loggedIn.next(value);
}
constructor(private tokenService: TokenService) {}
}
служба токенов
handle(res) {
this.setToken(res);
}
setToken(res) {
localStorage.setItem('token', res.access_token);
localStorage.setItem('user', res.user);
}
getToken() {
return localStorage.getItem('token');
}
getUser() {
return localStorage.getItem('user');
}
}
компонент навигационной панели
ngOnInit() {
this.authService.authStatus
.subscribe(
value => {
this.loggedIn = value
}
);
//set the username on navbar
this.user = this.tokenService.getUser();
}
2 ответа
Попробуйте позвонить
this.user = this.tokenService.getIser()
внутри подписаться.
Вы авторизируете сервисную функцию - это обратный вызов, который вызовет событие успеха или сбоя, когда все операции завершены, следовательно, код this.user = this.tokenService.getUser();
выполнено до заселения местного населения. Попробуйте переместить этот код в метод подписки authService.authStatus.
ngOnInit() {
this.authService.authStatus
.subscribe(
value => {
this.loggedIn = value
}
);
//set the username on navbar
this.user = this.tokenService.getUser();
}
как это.
ngOnInit() {
this.authService.authStatus
.subscribe(
value => {
this.loggedIn = value
this.user = this.tokenService.getUser();
}
);
}