如果有人可以向我解释这段代码是如何运作的那么会很棒,我会阅读文档,但并不是真的理解它。这可能是因为我在没有学习Firebase基础技术的情况下立即跳到Angular Fire。
constructor(afDb: AngularFireDatabase) {
afDb.list('items').snapshotChanges().map(actions => {
return actions.map(action => ({ key: action.key, ...action.payload.val() }));
}).subscribe(items => {
return items.map(item => item.key);
});
}
我真正不理解的是... action.payload.val()及其工作原理,还有为什么有两张地图?使用第二张地图,我无法达到我想要的对象的属性。
来源:https://github.com/angular/angularfire2/blob/master/docs/version-5-upgrade.md
视频我学习了地图,并以https://www.youtube.com/watch?v=YtHHvQ6zlTw
为基础任何我可以了解更多信息的来源或视频都将受到赞赏。
谢谢。
答案 0 :(得分:0)
我已经使用了你的例子,但稍微重构了一下,让它更容易理解。它现在分为两部分
1)创建指向服务器的链接(无提取)并对响应进行任何更改
2)获取响应(订阅)
地图可以随时更改响应"#34;可观察的,所以它控制订户将获得什么。第一个映射是将响应作为数组读取。第二个映射是读取数组中的每个项目,对于我们希望它包含其数据的每个项目,我们还希望它具有ID。所以现在当我们订阅这个函数时,我们将得到一个数据为+的对象数组。
//Function that returns an subscribe-able observable
fetchItems() {
return afDb.list('items')
.snapshotChanges()
.map((arr) => {
return arr.map((snap) => {
const obj = snap.payload.doc.data();
obj.id = snap.payload.doc.id;
return obj;
});
});
}
}
订阅它(记住在订阅可观察的内容之前没有任何事情发生)
//Calls the function and subscribe to the response
fetchItems()
.subscribe((res) => {
console.log('res: ', res);
});