【问题标题】:Getting a user from database inside view从数据库内部视图中获取用户
【发布时间】:2016-08-03 20:48:01
【问题描述】:

数据库:Firebase

用户可以添加看起来有点像的帖子:

postKey
  content: 'Content of the post',
  date: 'Date of post',
  author: 'authorKey' (author key is a login)

我认为我不应该将所有用户信息存储在 author 中,因为用户有一天会更改他的个人资料中的某些内容。我只将用户密钥存储在 author 中,我想在视图内打印发布数据时获取该用户。

(服务) 这就是我获取所有帖子的方式(正常工作)

  getPosts(): Promise<any> {
    return new Promise(
      (resolve) => {
        this.af.database.list('/posts')
          .subscribe(response => {
            if(response.length > 0) resolve(response);
          })
      }
    )
  }

(组件)这里我只是将所有这些帖子分配给帖子数组以在视图中打印它。

  posts: any;

  constructor(private homepageService: HomepageService) {
    homepageService.getPosts().then(
      response => {
        this.posts = response.reverse();
      });
  }

(查看)除了所有我可以很容易打印的帖子数据,我想通过 post.author 让用户打印照片、名字、姓氏等作者数据。

<div *ngFor="let post of posts" class="post-body">
    {{post.content}}
    {{homepageService.getUser(post.author)?.email}}
</div>

我想通过这种方式获得用户。这是getUser函数

  getUser(key): Promise<any> {
    return new Promise(
      (resolve) => {
        this.af.database.object('/users/' + key)
          .subscribe(response => {
            resolve(response);
          })
      }
    );
  }

我知道{{homepageService.getUser(post.author)?.email}} 的行是错误的,内部视图没有then,但我也尝试过使用异步管道。现在我处于停滞状态。我该怎么做?

【问题讨论】:

    标签: angular firebase firebase-realtime-database angularfire2


    【解决方案1】:
    {{(homepageService.getUser(post.author) | async)?.email}}
    

    {{(homepageService.getUser(post.author) | async).email}}
    

      getUser(key): Observable<any> {
        return this.af.database.object('/users/' + key);
      }
    

    【讨论】:

    • 在这种情况下,我的页面崩溃了。帖子不显示,我不能做任何事情,不能点击。一切都冻结了。 (控制台中没有错误)。当我读到this is expected behavior, because each time the method is called, you're returning a new instance of the promise, which when resolved, triggers change detection, which retrieves a new promise, which triggers change detection....
    • 如果直接返回从数据库调用中得到的 observable 怎么办? (见我更新的答案)
    猜你喜欢
    • 2017-11-06
    • 1970-01-01
    • 2012-08-05
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多