【发布时间】:2019-05-16 02:44:36
【问题描述】:
我将 Firebase 与 Ionic3 / Angular4 应用程序一起使用。
Firebase 实时数据库中的数据如下所示:
使用下面的 TS 代码,我正在从 Firebase 检索可观察数据...
getDishesCategories(uid: string) {
// 1. Fetch an observable AngularFire database snapshot
const afDishCategoriesList$ = this.database.list<DishCategory>(`/users/${uid}/dishcategories/`).snapshotChanges()
// 2. Map the AF list to an observable list of dish category objects
const dishCategoriesList$ = afDishCategoriesList$.pipe(map(changes => {
return changes.map(c => ({
...c.payload.val()
}))
}))
// 3. return the observable list of dish objects
return dishCategoriesList$
}
这给了我以下信息:
[{
createdDate: "2018-12-14T15:59:25.345Z",
dishes: { ozvawkfci1dadyuibgdy4: {name: "Dish 1", selected: true} },
id: "default01",
name: "All Dishes",
selected: true,
toggleDisabled: true
}]
问题是“菜肴”数据仍以 JSON 形式接收,Firebase 键和值作为对象。
我正在尝试将对象的“菜肴”对象映射到标准数组中,因此我可以在其上调用 .length() 之类的方法,并使用索引而不是键。
这就是我正在尝试的(菜肴也映射到数组):
[{
createdDate: "2018-12-14T15:59:25.345Z",
dishes: [ {name: "Dish 1", selected: true} ],
id: "default01",
name: "All Dishes",
selected: true,
toggleDisabled: true
}]
我在这里不需要 Firebase 键,只是一个沼泽标准零索引数组,每道菜在每个索引处存储为一个对象。只是无法想象如何做到这一点,因为我是 .map() 的新手,而且我已经盯着它看了好几个小时了!
有人可以帮忙吗?
谢谢!
【问题讨论】:
-
我认为,如果您明确定义(使用 JSON 样式语法,而不是屏幕截图),您拥有的对象的结构,以及您想要的对象的结构,会更容易。您可能只需要执行一些基本的从一件事到另一件事的翻译。
-
哦,嘿,道格!我一直在看你的视频——真的很有帮助,非常感谢那些:)。好的,我会在明天添加这个细节,我今晚要休息一下!干杯
-
OK 忍不住了!我已经编辑了 Doug 的原始帖子,这是否使它更清晰?在此先感谢 ;)
标签: javascript json firebase firebase-realtime-database angularfire