AngularFire Map解释

时间:2018-03-15 16:44:20

标签: javascript firebase firebase-realtime-database angularfire2

如果有人可以向我解释这段代码是如何运作的那么会很棒,我会阅读文档,但并不是真的理解它。这可能是因为我在没有学习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

为基础

任何我可以了解更多信息的来源或视频都将受到赞赏。

谢谢。

1 个答案:

答案 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);
     });