Angular routerLink только запускает ngOnInit один раз - PullRequest
0 голосов
/ 14 января 2020

Я нашел несколько вопросов, похожих на мои, но большая часть связана с параметрами, ответы не помогли мне решить мою проблему. По сути, проблема заключается в следующем: как только пользователь входит в систему, он может визуализировать свое имя пользователя в панели навигации, когда он щелкает по нему, страница переносит пользователя на страницу профиля, в первый раз, когда она работает идеально, когда пользователь выходит из системы и входит под другим именем пользователя, информация о старом пользователе остается там до тех пор, пока страница не будет обновлена.

Сервисная учетная запись

getUserInformation(userId: number) {
if (!this.userInformation$) {
  this.userInformation$ = this.http.post<any>(this.baseUrlGetUserInfo, { userId }).pipe(shareReplay());
}
return this.userInformation$;
}

По методу инициализации

ngOnInit() {
this.route.params.subscribe(params => {
  this.loaderSpinner = true;
  // tslint:disable-next-line: radix
  // this.userId = this.accntService.currentUserId;
  // tslint:disable-next-line: radix
  this.accntService.currentUserId.subscribe(res => {
    this.userId = res;
  });
  // tslint:disable-next-line: radix
  this.userInformation$ = this.accntService.getUserInformation(parseInt(this.userId));
  this.userInformation$.subscribe(result => {
    this.userInformation = result.userInformation;
    console.log(this.userInformation);
    this.loaderSpinner = false;
  }, error => {
    this.loaderSpinner = false;
    console.error(error);
  });
});
}

Navbar HTML

<a [routerLink]="['/profile']" class="nav-link" *ngIf="(userName$ | async) as userName">
          {{userName}}
        </a>

Может ли кто-нибудь помочь мне с этим?

Заранее спасибо.

1 Ответ

0 голосов
/ 17 января 2020

Вот проблема, я нашел проблему. В основном ошибка была в onDestroy.

private getUserInfo(): void {
this.loaderSpinner = true;
this.accntService.currentUserId.pipe(takeUntil(this.$ondestroy)).subscribe(res => {
  this.userId = res;
});

this.accntService.getUserInformation(this.userId).pipe(takeUntil(this.$ondestroy)).subscribe(response => {
  this.userInformation = response.userInformation;
  this.loaderSpinner = false;
}, () => {
  this.loaderSpinner = false;
});
}

ngOnInit() {
this.getUserInfo(); }

ngOnDestroy() {
this.$ondestroy.next(true);
}
...