首页 > 解决方案 > Angular 8,Firebase 根据 UID 的集合显示用户

问题描述

我需要一些帮助。试图调查并进行了多次尝试,最终我得到了最后一个用户集合或第一个用户集合,无论如何我都无法返回/查看所有内容。

例如,我有 4 个 UID,我需要显示与这 4 个 UID 匹配的用户,比如说 50 个用户。我尝试使用this.db.list('users/', ref => ref.orderByChild('id').equalTo(<string>id.ids)).snapshotChanges(),但这仅返回与最后一个值/UID 匹配的用户。

是否有可能以任何可能的方式实现这一目标而不会损失太多性能?

谢谢

标签: angularfirebasefilterview

解决方案


花了几个小时后,我终于想出了一个解决方案,我在 ngOnInit 上执行了这段代码:

  this.auth.user.subscribe(user => {
  this.db.list('users/' + user.uid + '/friends').valueChanges().pipe(map(changes => {
    return changes.map(x => {
      return x;
    })
  })).subscribe(friends => {
    let test1 = [];
    let test2 = [];
    for (let i = 0; i < friends .length; i++) {
      this.db.list('users/', ref => ref.orderByChild('id').equalTo(<string>friends[i].ids)).snapshotChanges()
        .subscribe(x => {
        test1.push(x);
        test1.forEach(y => {
          y.forEach(z => {
            test1 = [];
            test2.push(z);
            this.friendsList$ = test2;
          })
        })
      });
    }
  });
});

基于下图中显示的这 4 个 uid,我正在获取所有用户配置文件以及每个用户所需的所有数据,以创建我连接的用户列表。

在此处输入图像描述

在模板的最后,我在 *ngFor 循环中使用了 friendsList$。

注意: 这是代码可以重构并做得更好,这是我的第一个解决方案。重构后,我将编辑此答案。这是以防万一有人遇到同样的问题。


推荐阅读