我正在使用数据服务将用户数据发送到应用程序并在标题组件中显示用户名。如果我使用登录组件在我的应用程序中登录,用户名会正确显示,但是当我重新加载页面时,用户数据消失了。
在重新加载之前登录
重新加载后
用户数据来自使用BehaviorSubject的数据服务:
data.service.ts
export class DataService {
private userSource = new BehaviorSubject({});
currentUser = this.userSource.asObservable().pipe(distinctUntilChanged());
constructor(private injector: Injector, private api: UtentiApiService) { }
getUser() {
return this.currentUser;
}
getUserFromToken() {
const authService = this.injector.get(AuthService);
const token = authService.getToken();
const userIdToken = jwt_decode(token);
// console.log(userIdToken);
return this.api.getUtente(userIdToken.userId);
}
getPermissionsFromToken(): Observable<any> {
const authService = this.injector.get(AuthService);
const token = authService.getToken();
const userIdToken = jwt_decode(token);
return of(userIdToken.permArr);
}
changeUser(user: object) {
this.userSource.next(user);
}
}
在头部组件中,我使用该服务:
header.component.ts
export class HeaderComponent implements OnInit {
user: object;
constructor(private router: Router, private authService: AuthService, private data: DataService) { }
ngOnInit() {
this.getUser();
}
getUser() {
this.data.getUser().subscribe(utente => {
this.user = utente;
console.log(this.user);
});
}
onLogout() {
this.authService.logoutUser();
}
sendUser(user) {
this.data.changeUser(user);
}
}
在登录组件中,我将用户数据发送到数据服务,但是在重新加载页面时,登录组件不会被触发,因此我在服务中或标题中都没有用户数据。如何修复这个错误?
这里是带有完整代码的 StackBlitz:https://stackblitz.com/github/ufollettu/SEANSA
感谢您的帮助。