Google cloud firestore Firestore从id为';s用于聚合物dom重复

Google cloud firestore Firestore从id为';s用于聚合物dom重复,google-cloud-firestore,polymer-2.x,Google Cloud Firestore,Polymer 2.x,我尝试将Firestore与Polymer一起使用,我获得了一个数组,以dom重复方式将其发送到Polymer,如下所示: var query=db.collection("operaciones"); db.collection("operaciones") .onSnapshot((querySnapshot) => { querySnapshot.forEach(function(doc) { });

我尝试将Firestore与Polymer一起使用,我获得了一个数组,以dom重复方式将其发送到Polymer,如下所示:

    var query=db.collection("operaciones");
    db.collection("operaciones")              
    .onSnapshot((querySnapshot) => {
    querySnapshot.forEach(function(doc) {
    });
        that.operacionesPorCliente=Array.from(querySnapshot.docs.map(doc=>doc.data()));
    });
    console.log (that.operacionesPorCliente);   // this works but the ID doesnt exist here....
    }
这是可行的,但该数组不包含来自firestore的id,问题是我需要该id来更新数据:(但它不在数组中)

希望我解释一下我自己,有什么帮助吗?

我制作了一个聚合元素(聚合3)来保持Firebase Firestore数据的同步。这个组件有一个dom repeat template元素,用来显示总是最新的收集数据

我想这会回答你的问题

import {html, PolymerElement} from '@polymer/polymer/polymer-element.js';
import {} from '@polymer/polymer/lib/elements/dom-repeat.js';

/**
 * @customElement
 * @polymer
 */
class FirebaseFirestoreApp extends PolymerElement {
  static get template() {
    return html`
      <style>
        :host {
          display: block;
        }
      </style>
      <h1>Firestore test</h1>
      <template is="dom-repeat" items="[[elems]]">
        <p>[[item.$id]] - [[item.name]]</p>
      </template>
    `;
  }
  static get properties() {
    return {
      elems: {
        type: Array,
        value: function() {
          return [];
        }
      }
    };
  }

  ready() {
    super.ready();
    var db = firebase.firestore();
    const settings = {timestampsInSnapshots: true};
    db.settings(settings);
    db.collection("operaciones").onSnapshot((querySnapshot) => {
      querySnapshot.docChanges().forEach((change) => {
        if (change.type === "added") {
          let newElem = this.makeElem(change);
          this.push('elems', newElem);
        }
        if (change.type === "modified") {
          let modifiedElement = this.makeElem(change);
          let index = this.getElemIndex(change.doc.id);
          this.set(`elems.${index}`, modifiedElement);
        }
        if (change.type === "removed") {
          let deletedElement = this.getElemIndex(change.doc.id);
          this.splice('elems', deletedElement, 1);
        }
      });
    });
  }

  makeElem(change) {
    let data = change.doc.data();
    data.$id = change.doc.id;
    return data;     
  }

  getElemIndex(id) {
    let index = this.elems.findIndex((elem) => {
      if(elem.$id == id) {
        return true;
      }
    });
    return index;
  }
}

window.customElements.define('firebase-firestore-app', FirebaseFirestoreApp);
从'@polymer/polymer/polymer element.js'导入{html,polymererelation};
从'@polymer/polymer/lib/elements/dom repeat.js'导入{};
/**
*@customElement
*@聚合物
*/
类FirebaseFirestoreApp扩展了聚合关系{
静态获取模板(){
返回html`
:主持人{
显示:块;
}
燃烧室试验
[[item.id]]-[[item.name]]

`; } 静态获取属性(){ 返回{ 要素:{ 类型:数组, 值:函数(){ 返回[]; } } }; } 就绪(){ super.ready(); var db=firebase.firestore(); 常量设置={timestampsInSnapshots:true}; 数据库设置(设置); 数据库集合(“操作”).onSnapshot((querySnapshot)=>{ querySnapshot.docChanges().forEach((更改)=>{ 如果(change.type==“已添加”){ 设newElem=this.makeElem(change); 这个.push('elems',newElem); } 如果(change.type==“修改”){ 让modifiedElement=this.makeElem(change); 让index=this.getElemIndex(change.doc.id); this.set(`elems.${index}`,modifiedElement); } 如果(change.type==“已删除”){ 让deletedElement=this.getElemIndex(change.doc.id); 此拼接('elems',deletelement,1); } }); }); } 马克莱姆(变化){ let data=change.doc.data(); 数据。$id=change.doc.id; 返回数据; } getElemIndex(id){ 让index=this.elems.findIndex((elem)=>{ if(元素$id==id){ 返回true; } }); 收益指数; } } window.customElements.define('firebase-firestore-app',firebase-firestoreapp');
同步系统应适用于所有类型的Firebase Firestore集合,但模板dom repeat Suposs在集合内的对象中有一个名为“name”的属性

Firebase控制台中的集合如下所示


我建议您使用用于Firebase的聚合物组件Polymerfire,但是如果您想在javascript中使用它,可以直接在doc:doc.id()中获取id。

但是官方Polymerfire还不支持firestore,是吗?要使用存储,您应该首先创建一个Firebase引用,[Firebase storage ref](),带有文件的路径,然后下载、上载或删除。