无法读取未定义的订阅

时间:2019-03-17 00:39:35

标签: angular firebase rxjs

我尝试从服务中获取有关身份验证的信息,并遇到以下问题:

  

无法读取未定义的属性“ subscribe”

服务代码:

user:any;

  constructor(private afAuth: AngularFireAuth, private http:HttpClient,private router: Router) {
    this.afAuth.authState.subscribe(user=>{
      this.user = user;
    });
    console.log(this.afAuth.authState);
   }

   userinfo(){
     return this.user;
   }

组件的代码:

user:any
  constructor(public afAuth:AuthService) { 
  }

  ngOnInit() {
    this.afAuth.userinfo().subscribe(userinfo =>{
      this.user = userinfo;
    })
    console.log(this.user.uid);
  }

我在哪里错了?以及我该如何解决?

1 个答案:

答案 0 :(得分:1)

问题在于userinfo返回一个User,而不是一个Observable,因此它没有subscribe方法。

我将AuthService更改为

user: Observable<User>;
constructor(private afAuth: AngularFireAuth, private http:HttpClient,private router: Router) {
  this.user = this.afAuth.authState;
}

此外,重新考虑为什么总是尝试在服务和组件中的属性中存储最新值。 Angular的哲学是使用连接的Observables来生成值。