0

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

版本

“angularfire2”:“^5.0.0-rc.6”
“firebase”:“^4.10.1”
“离子角”:“3.9.2”,

Firebase 结构示例

Firebase 结构示例

我需要打印的内容

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

方法

  • 首先,我尝试显示嵌套的 *ngFor,例如:

...但没有像始终打印的那样正确显示,即使该订单没有用户。

  • 之后尝试打印一个函数getUserName(order.payload.val().user),但似乎不可能在那里调用/打印函数......

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

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

我检索订单列表:

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

此时ordersList已正确打印,*ngFor但我想通过代码访问键和值。我观看使用Ionic3 和 angularfire5 的视频.map(见 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”函数 显示从 firebase 到 ionic 的嵌套数据

4

1 回答 1

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 中打印订单时遇到问题,当我更新任何信息时,它们会被打印但重复。无论如何,我想我必须澄清我的数据库结构是否是我需要的。

于 2018-03-13T00:16:03.040 回答