Angular2 中的 BehaviorSubject 不是第二次设置值?
Posted
技术标签:
【中文标题】Angular2 中的 BehaviorSubject 不是第二次设置值?【英文标题】:BehaviorSubject in Angular2 is not set value second time? 【发布时间】:2017-07-05 11:57:41 【问题描述】:我的代码是这样的
login.component.ts
loginSucess ()
this.MenuService.setUserName(userauthresponce.username);
MenuService.ts
private usernameSource = new BehaviorSubject<any>(0);
setUserName (username)
this.usernameSource.next(username);
getUserName ()
return this.usernameSource.asObservable();
other.component.ts
constructor(MenuService:MenuService)
this.MenuService.getUserName().subscribe(responce =>
console.log('username', responce);
this.username = responce;
);
/* it's not working hear*/
switchrole()
this.router.navigate(['/dashboard']);
this.MenuService.setUserName(this.username);
我在第一次登录时获取用户名,之后当用户单击切换角色按钮时,它正在调用切换角色功能,在此功能中我必须将页面导航到仪表板,在这种情况下我将用户名设为 0;
即使我从 switchrole() 设置了用户名,但这不起作用
我没有得到我的错误,请帮助我
【问题讨论】:
你在哪里提供MenuService
?
【参考方案1】:
尽量不要调用this.usernameSource.asObservable()
,只返回this.usernameSource
,因为你可以直接订阅BehaviorSubject
,但你不能在Observable上调用next;
例如
private usernameSource = new BehaviorSubject<any>(0);
setUserName (username)
this.usernameSource.next(username);
getUserName ()
return this.usernameSource;
【讨论】:
以上是关于Angular2 中的 BehaviorSubject 不是第二次设置值?的主要内容,如果未能解决你的问题,请参考以下文章