Компонент заголовка теряет состояние при обновлении - PullRequest
0 голосов
/ 26 марта 2019

Когда пользователь входит в систему, его имя отображается на панели навигации.Однако, когда пользователь обновляет страницу, его имя исчезает.

Я попытался изменить 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, поскольку понял, что он выдает последнее значение, но проблема не устранена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...