首页 > 解决方案 > 从 firedatabase 角度检索属性

问题描述

我试图从我的 firebase 集合用户那里获取属性名称。我用这个功能创建了一个服务。

  getUserMessage(UserID: string) {
    return this.db.collection('users', ref => ref.where('uid', '==', UserID).valueChanges();
  }

这很好,因为当我通过这种方式从另一个组件检索数据时

getUser(UserID: string) {
  setTimeout(() => {
    const userName : User = this.chatService.getUserMessage(UserID).subscribe((data) => {
     console.log(data);
     return data;
   });
  }, 1000);
}

使用 console.log 我收到 {email: "XXXX", name: "xxxx", uid="xxxx"}。但是当我尝试使用 data.name 这说未定义。

注意:我使用 setTimeout 是因为当我在 chrome 中查看控制台时,这些控制台每毫秒打印一次,有没有办法让订阅只在特定时间起作用?

标签: angularfirebase

解决方案


我使用 .map() 解决了这个问题

  `getUser(UserID: string) {
    this.chatService.getUserMessage(UserID).subscribe((data) => {
      this.name = data.map(a => {return a["name"];});
      return this.name;
      });
   }`

另一方面,我在将其显示为函数 {{getUser(parameter)}} 时遇到问题。使用 console.log() 我检索名称,所以我认为该函数已被弹出,但在标签中这不会出现在 html 组件中。例子:

<ion-label> {{this.getUser(mensaje.user_id)}} </ion-label>

推荐阅读