Google cloud firestore Firestore从id为';s用于聚合物dom重复
我尝试将Firestore与Polymer一起使用,我获得了一个数组,以dom重复方式将其发送到Polymer,如下所示: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) { });
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](),带有文件的路径,然后下载、上载或删除。