更改ngOnInit中的BehaviorSubject值,导致堆栈溢出错误

时间:2019-04-12 02:14:54

标签: angular typescript login angular7

我正在尝试更改服务中的Observable值以在其他页面上获取它。检查用户角色的值以及页面是否安全,应将用户重定向到主页。

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 :(得分:0)

我确定您的值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 => { ... });