如何操作和打印Ionic中嵌套的firebase列表中的数据

时间:2018-03-12 12:09:54

标签: firebase-realtime-database ionic3 angularfire5

我正在使用Ionic和Firebase,我正面临链接数据的几个问题,无论是操作还是打印。我已阅读文章并观看了几个版本之间不同方法的视频但尚未解决,我必须认识到现在我有一个可怕的混乱(我当然是初学者)。让我解释一下更多细节:

版本

  

“angularfire2”:“^ 5.0.0-rc.6”
  “firebase”:“^ 4.10.1”
  “ionic-angular”:“3.9.2”,

Firebase结构示例

Firebase structure sample

我需要打印

现在我可以使用a检索和打印订单列表,当然“user”字段显示为“-L5uzsn0C4-FYiS7HiY”,但我需要显示的是用户“Carlos”的名称

途径

  • 首先,我尝试显示嵌套的* ngFor,类似于:

              

...但是,即使没有该订单的用户,也不会像打印一样正确显示。

  • 之后尝试打印函数getUserName(order.payload.val().user),但似乎无法在那里调用/打印函数...

  • 之后我调查了是否有办法用“JOINS”向firebase抛出查询,就像在SQL数据库中一样。观看了几个视频但没有找到解决方案。例如,在this官方视频中,他们使用db.child,但此功能似乎不可用,我认为是版本问题......

  • 对于最后一次尝试,我认为最好的方法是通过代码检索订单列表,然后使用list.user检索用户对象并在打印前将其推送到列表,但这非常困难。但我甚至无法操纵检索到的清单的数据!!

我检索订单清单:

ordersList: any;
this.ordersList = this.afd.list('/orders/2018/03-marzo/').snapshotChanges();

此时ordersList使用*ngFor正确打印,但我想按代码访问键和值。我观看了Ionic3的this视频和使用.map的angularfire5(见分钟2:02),我正在使用此代码,但它无效,无法检索错误但没有打印任何内容

this.ordersList$ = this.afd.list('/orders/2018/03-marzo/')
  .snapshotChanges() //Key and value (valueChanges only value)
  .map(
    changes => {
      console.log(changes.map(c => ({
        key: c.payload.key,
        ...c.payload.val(),
      })));
    });
  • 您能帮我检索一下列表并转换值吗?
  • 我是否有可用于观察更新信息的angularfire5文档?我看过很多以前版本的样本。

提前致谢。

相关问题 相关问题似乎是针对以前的angularfire版本开发的,因为我无法使用所示的“.map”函数 Displaying nested data from firebase to ionic

1 个答案:

答案 0 :(得分:0)

我对这个问题有一个答案,尽管引发了另一个问题。

以下是操作firebase列表数据所需的代码,执行您想要的操作并将其加载到数组中:

this.afd.list('/orders/2018/03-marzo/')
      .snapshotChanges()
      .subscribe( res =>
        res.map(action => {
          //another query to firebase to retrieve the name of the user with id = action.payload.val().repartidor
          orders.push({key: action.key,
                       tienda: action.payload.val().tienda,
                       cajas: action.payload.val().cajas,
                       repartidor: //name stored previously
                     })
        }),
        error => console.log(error));

这就是我在开始时想要的东西,通过这个我能够到达订单的每个领域。

现在我在打印html中的订单时遇到问题,当我更新任何信息时,它们会被打印但重复。无论如何,我想我必须澄清我的DB结构是否是我需要的。