Когда пользователь входит в систему, его имя отображается на панели навигации.Однако, когда пользователь обновляет страницу, его имя исчезает.
Я попытался изменить isLoginNameSubject из Subject в ReplaySubject и BehaviorSubject.
Authservice: когда пользователь отправляет форму, он вызывает login (), который создает два побочных эффекта, хранит токен в LocalStorage, использует подмножество ответа для заполнения панели навигации (Header).
export class AuthenticationService {
private uri: string;
public isLoginNameSubject = new BehaviorSubject<Object>('test');
constructor(
private http: HttpClient,
private config: Configuration,
private router: Router ) {
this.uri = this.config.getConfigOption('apiUri');
}
public login = (email: string, password: string) => {
return this.http.post(
`${this.uri}/authenticate?login=${email}&password=${password}`,
undefined
).pipe(
tap(res => localStorage.setItem('token', JSON.stringify(res))),
tap(res => this.isLoginNameSubject.next(res.user.data)))
}
public loginName(): Observable<object> {
return this.isLoginNameSubject.asObservable().pipe(share())
}
Заголовок TS: я ввожу loginName (), чтобы скрыть реализацию Subject.
export class HeaderComponent implements OnInit {
public userName$: Observable<object>
constructor(
private authService: AuthenticationService,
private config: Configuration) {
}
ngOnInit() {
this.userName$ = this.authService.loginName()
}
}
Шаблон заголовка:
<strong *ngIf="userName$ | async as user">
{{user.name}}
</strong>
Когда пользователь входит в систему, пользователь попадает на страницу приветствия.Содержимое панели навигации / заголовка заполняется содержимым из res.user.data, в частности именем пользователя.Когда пользователь обновляет страницу, я ожидаю, что имя пользователя будет продолжать отображаться.На самом деле это не так.Кажется, что при обновлении файл res.user.data теряется.
Сначала я решил, что это связано с тем, что isLoginNameSubject является просто субъектом.При обновлении страница перезагружается, но событие входа в систему отсутствует.Я пытался использовать isLoginNameSubject в качестве BehaviorSubject, поскольку понял, что он выдает последнее значение, но проблема не устранена.