Измените значение BehaviorSubject в ngOnInit, что приведет к ошибке переполнения стека - PullRequest
0 голосов
/ 12 апреля 2019

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

this.myservice.castrole.subscribe(value => {
    if (value === 'User') {
      this.rout.params.subscribe(params => {
        this.exid = params['examid'];
      });
    } else {
      this.myservice.checkUser('NoUser');
      this.router.navigate(['']);
    }
  }); 

Я также попытался поместить этот код в ngOnChanges, но все равно появляется та же ошибка.Он останавливает браузер на несколько секунд.В обслуживании код

private role = new BehaviorSubject<string>('NoUser');
  castrole = this.role.asObservable();

и

checkUser(data) {
  this.role.next(data);
}

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 12 апреля 2019

Я уверен, что ваше значение castrole неверно доступно или равно нулю.

Для ясности я обычно делаю следующее (в сервисе):

private roleSubject: BehaviorSubject<string> = new BehaviorSubject<string>('NoUser');

getRoleSubject() { 
   return this.roleSubject;
}

getRoleSubjectAsObservable() {
   return this.roleSubject.asObservable();
}

в любом месте, где вам это нужно:

Тема:

this.service.getRoleSubject().next(value);

Наблюдаемые

this.service.getRoleSubjectAsObservable().subscribe(value => { ... });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...