Javascript 角度5:类型';正确';不可分配给类型';可观察<;布尔值>;
我正在尝试在用户登录后更改登录状态 组件。tsJavascript 角度5:类型';正确';不可分配给类型';可观察<;布尔值>;,javascript,rxjs,angular5,Javascript,Rxjs,Angular5,我正在尝试在用户登录后更改登录状态 组件。ts isLoggedIn$: Observable<boolean>; constructor (private auth:Auth){} ngOnInit (){ this.isLoggedIn$ = this.auth.getUser() console.log(this.isLoggedIn$); } @Injectable() export class Auth { priv
isLoggedIn$: Observable<boolean>;
constructor (private auth:Auth){}
ngOnInit (){
this.isLoggedIn$ = this.auth.getUser()
console.log(this.isLoggedIn$);
}
@Injectable()
export class Auth {
private user:boolean = false;
setUser(){
this.user= true;
}
getUser(){
return this.user
}
removeUser(){
this.user = false;
}
}
但是我犯了以下错误
错误TS2322:类型“true”不可分配给类型
“可观察的”
如果您在没有实际服务的情况下模拟
http
,您可以将loggedIn状态包装为可观察状态,如下所示,以便快速修复。看一看rxjs,了解观测值
,以便更好地理解
@Injectable()
export class Auth {
private user:boolean = false;
setUser(){
this.user= true;
}
getUser(): Observable<boolean>{
return Observable.of(this.user)
}
removeUser(){
this.user = false;
}
}
@Injectable()
导出类身份验证{
私有用户:boolean=false;
setUser(){
this.user=true;
}
getUser():可观察{
返回可观察的(此用户)
}
removeUser(){
this.user=false;
}
}
另外:
console.log(this.isLoggedIn$)
将不会这样工作 您需要一个可观察的布尔值,但只返回一个布尔值。如果您从异步映射到boolean
值的http
调用返回Observable
,则此代码将更有意义。我正在使用Auth
类模拟http
服务如果您正在模拟,则返回Observable.of(This.user)
您是否在模板中使用isLoggedIn$
?如果是这样的话,您可以像*ngIf=“isLoggedIn$| async”
一样使用它。是的,我正在使用它。我需要添加订户来侦听更改吗?我收到这个错误`Observable\u 1.Observable.of不是Auth.getUser的函数`您需要导入这些<代码>从'rxjs/Observable'导入{Observable};导入“rxjs/add/observable/of”在这种情况下,使用Promise
+async
函数会更好。但是为什么不更新值呢??此组件对所有人都是通用的。您如何使用该值?如果它在模板中,您可以使用isLoggedIn$| async
。否则您将不得不订阅