【问题标题】:angular5: Type 'true' is not assignable to type 'Observable<boolean>angular5:类型 'true' 不可分配给类型 'Observable<boolean>
【发布时间】:2018-03-01 13:16:49
【问题描述】:

我正在尝试在用户登录后更改登录状态

component.ts

isLoggedIn$: Observable<boolean>; 

  constructor (private auth:Auth){}

  ngOnInit (){


     this.isLoggedIn$ = this.auth.getUser()

     console.log(this.isLoggedIn$);

  }

Auth.ts

@Injectable()
export class Auth {

    private user:boolean = false;

     setUser(){

        this.user= true;
     }

     getUser(){
        return this.user
     }

    removeUser(){
        this.user = false;
    }

}

但我收到以下错误

错误 TS2322:类型“真”不可分配给类型 “可观察”

【问题讨论】:

  • 您期望 Observableboolean 值,但只返回 boolean 值。如果您从异步映射到 boolean 值的 http 调用返回 Observable,则此代码将更有意义。
  • 我在用Auth 类嘲笑http 服务
  • 如果你在嘲笑,那么返回Observable.of(this.user)
  • 您是否在模板中使用isLoggedIn$?如果是这样,您可以像*ngIf="isLoggedIn$ | async" 一样使用它
  • 是的,我正在使用它,我需要添加订阅者来收听更改

标签: javascript rxjs angular5


【解决方案1】:

如果您在没有实际服务的情况下模拟http,您可以将loggedIn 状态包装在Observable 中,如下所示以便快速修复。看看 rxjs 并了解Observables 以便更好地理解。

@Injectable()
export class Auth {

    private user:boolean = false;

     setUser(){

        this.user= true;
     }

     getUser(): Observable<boolean>{
        return Observable.of(this.user)
     }

    removeUser(){
        this.user = false;
    }

}

另外:console.log(this.isLoggedIn$) 不会那样工作。

【讨论】:

  • 我收到这个错误`Observable_1.Observable.of is not a function at Auth.getUser`
  • 你需要import那些。 import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/of';
  • 在这种情况下使用Promise + async 函数会更好。
  • 但为什么不更新值?这个组件对所有人都是通用的
  • 你是如何使用这个值的?如果它在模板中,您可以使用isLoggedIn$ | async。否则你将不得不subscribe
猜你喜欢
  • 1970-01-01
  • 2017-06-29
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2020-08-29
  • 2021-08-17
相关资源
最近更新 更多