Angular 7: подписка на тему поведения Rxjs не работает при перезагрузке страницы, но работает при навигации по маршруту - PullRequest
0 голосов
/ 05 ноября 2019

В моем заголовке component.ts

ngOnInit() {
    this.authService.getUser((data)=>{
      this.authService.userInfo.next(data)

    })
}

В authService.ts

export class AuthService {

  userInfo= new BehaviorSubject<any>(null);

}

В моем другом компоненте я подписываюсьпеременная в ngOnInit

ngOnInit() {
 this.auth.userInfo.subscribe((data)=>{
      this.userInfo = data.user;
      console.log('user data subsribed ',this.userInfo)
    })  

}

Это прекрасно работает при навигации по маршруту, но когда я перезагружаю страницу, подписчик не запускает

Ответы [ 3 ]

1 голос
/ 05 ноября 2019

Существует вероятность того, что userInfo тема, излучаемая до подписки. Что означает, что компонент подписки пропустил данные. Я предлагаю вместо этого использовать ReplaySubject . Он содержит данные, и компонент поздней подписки все равно получит их.

0 голосов
/ 05 ноября 2019

Попробуйте подписаться на тему в хуке жизненного цикла ngAfterViewInit вместо ngOnInit

0 голосов
/ 05 ноября 2019

Вы не подписаны на функцию this.authService.getUser (). userInfo - подписка, но она не вызывает функцию getUser ().

Из этого примера я не знаю, когда она работает во время навигации.

Но разве вы не делаете это? слишком сложно, введя поведение субъекта? Тебе это нужно? Если это потому, что вы хотите кэшировать результат вызова getUser, тогда вам лучше добавить

getUser() => this.http.get<UserInfo>().pipe(share())

или ввести переменную:

getUser() => this.userInfo ? of(this.userInfo) : this.http.get<UserInfo>().pipe(tap(userInfo => this.userInfo = userInfo))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...