由于我不是JS专家,因此沮丧地解决了这个问题。 ?
我正在使用Firestore作为数据库,并使用VuexFire将数据绑定到VueX状态,
string foo = "[[demo.waka=340]]";
string a = foo.Substring(foo.LastIndexOf('=') + 1);
string b = a.Substring(0, 1);
int outputNumber = Convert.ToInt32(b);
从firebase文档开始,使用香草JS
getLeads: firestoreAction(async ({
bindFirestoreRef
}) => {
// return the promise returned by `bindFirestoreRef`
return bindFirestoreRef('leads', db.collection('leads').orderBy('updated.date', 'desc').limit(30))
}),
任何帮助将不胜感激。 ??
答案 0 :(得分:3)
内部VueFire和VuexFire使用serializer
函数,将RTDB或Firestore返回的每个Document映射到绑定到最终组件或Vuex存储状态的数据对象。
默认serializer
由功能createSnapshot实现,该功能是vuefire核心库的一部分:
/**
* @param {firebase.firestore.DocumentSnapshot} doc
* @return {DocumentData}
*/
export function createSnapshot (doc) {
// defaults everything to false, so no need to set
return Object.defineProperty(doc.data(), 'id', {
value: doc.id
})
}
如您所见,它仅返回doc.data()
(添加了id
)并丢弃doc
对象。但是,当通过query.startAfter(doc)
实现Firestore分页时,我们需要原始的doc
对象。好消息是VueFire和VuexFire API允许我们用自己的serializer
来替换doc对象,这样可以保留doc对象,如下所示:
const serialize = (doc: firestore.DocumentSnapshot) => {
const data = doc.data();
Object.defineProperty(data, 'id', { value: doc.id });
Object.defineProperty(data, '_doc', { value: doc });
return data;
}
我们可以通过plugin options全局配置新的VuexFire序列化程序,也可以通过binding options进行每个绑定的配置。
//全局定义 Vue.use(firestorePlugin,{serialize});
//或每个绑定 bindFirebaseRef('todos',db.ref('todos'),{序列化})
对于VuexFire,我们现在可以访问第一个文档为state.todos[0]._doc
或最后一个文档state.todos[state.todos.length-1]._doc
,并使用它们来实现对集合的分页查询或“获取下一个”和“获取上一个”查询绑定单个文档(在基本查询具有多字段排序时必不可少)。
注意:由于_doc
和id
是不可枚举的属性,因此它们不会出现在组件上或将对象存储在Vue DevTools中。
答案 1 :(得分:1)
让我们说我有一个客户记录集合,并且我显示的是前5个,最后更新的是该记录。
查询是
getLeads: firestoreAction(({ commit, bindFirestoreRef
}) => {
bindFirestoreRef('Leads', db.collection('leads')
.orderBy('updated.date', 'desc').limit(5)).then(documents => {
commit('POPULATE_TESTLEADS', documents);
commit('LAST_DOC', documents[documents.length - 1]);
});
}),
我正在状态中保存结果和lastdoc,循环并显示名称,如下所示:
Nakheel
Emaar Group
Yapi Kredi Inc
Cairo Amman Bank
Arab Jordan Investment Bank LLC
然后我再次调用最后一个文档作为查询光标,并希望接下来的5个文档从firebase返回,就像这样
moreLeadLeads: firestoreAction(({ state, bindFirestoreRef
}) => {
bindFirestoreRef('testLeads', db.collection('leads')
.orderBy('updated.date', 'desc')
.startAfter(state.lastDoc).limit(5))
}),
但是我从firestore获得了与上述相同的5个结果。我究竟做错了什么? :(
答案 2 :(得分:0)
根据binding data and using it上的VueFire文档,$bind
方法(我假设您的bindFirestoreRef
包装)返回了一个带有结果的promise(并将其绑定到{{1} }。从该文档中:
this
因此,您应该能够执行相同的操作,然后使用类似以下内容的方法从数组中获取文档:
this.$bind('documents', documents.where('creator', '==', this.id)).then(documents => {
// documents will point to the same property declared in data:
// this.documents === documents
})