Vue.js 如何从Vuex中的不同名称空间模块访问RootGetter?
我有一个名为“forms”的Vuex模块。我有一个名为“users”的不同模块(也有名称空间) 我正在使用Vuexfire(这是第一次,我认为这是让我绊倒的原因)。并且有一个这样的动作:Vue.js 如何从Vuex中的不同名称空间模块访问RootGetter?,vue.js,google-cloud-firestore,vuex,vuex-modules,vuexfire,Vue.js,Google Cloud Firestore,Vuex,Vuex Modules,Vuexfire,我有一个名为“forms”的Vuex模块。我有一个名为“users”的不同模块(也有名称空间) 我正在使用Vuexfire(这是第一次,我认为这是让我绊倒的原因)。并且有一个这样的动作: const actions = { loadPendingHoursRequests: firestoreAction((context) => { context.bindFirestoreRef('pendingHoursRequests', db.collec
const actions = {
loadPendingHoursRequests: firestoreAction((context) => {
context.bindFirestoreRef('pendingHoursRequests', db.collection('hours')
.where('submittedToUID', '==', "iTd865JKWXRmhz2D2mtW7KIpL7a2"))
}),
loadPendingHoursRequests ({ dispatch, commit, getters, rootGetters }) {
let uid = rootGetters['users/currentUserUID'];
console.log(uid)
firestoreAction((context) => {
context.bindFirestoreRef('pendingHoursRequests', db.collection('hours').where('submittedToUID', '==', uid))
})
}
这将按预期工作,并在Firestore和Vuex之间创建实时连接。问题是我希望“iTd865JKWXRmhz2D2mtW7KIpL7a2”是从“用户”模块中提取的动态值
我完全迷路了。如果我像这样重构:
const actions = {
loadPendingHoursRequests: firestoreAction((context) => {
context.bindFirestoreRef('pendingHoursRequests', db.collection('hours')
.where('submittedToUID', '==', "iTd865JKWXRmhz2D2mtW7KIpL7a2"))
}),
loadPendingHoursRequests ({ dispatch, commit, getters, rootGetters }) {
let uid = rootGetters['users/currentUserUID'];
console.log(uid)
firestoreAction((context) => {
context.bindFirestoreRef('pendingHoursRequests', db.collection('hours').where('submittedToUID', '==', uid))
})
}
上面的console.log返回“undefined”。即使我删除了.where('submittedToUID','==',uid)
,firestoreAction也不会起作用
提前谢谢。我很想知道我在这里不了解的内容。未经测试(我不使用VuexFire),但假设bindFirestoreRef
需要上下文
对象,您也可以将rootGetters
作为其属性进行访问。将这两个片段放在一起,如下所示:
const actions={
loadPendingHoursRequests:firestoreAction((上下文)=>{
const uid=context.rootGetters['users/currentUserUID'];
context.bindFirestoreRef('pendingHoursRequests',db.collection('hours'))
.where('submittedToUID','=',uid))
})
}
console.log(rootGetters)
,您看到了什么?对于选项1(以上)console.log(rootGetters)
返回“ReferenceError:rootGetters未定义”,这可能是意料之中的。选项2返回一个对象,其中列出了我的所有getter。很抱歉发垃圾邮件问我自己的问题。我想我把异步代码搞砸了rootGetters['users/currentUserUID']
(以上)返回未定义的。。。但是根据Vuex开发工具,有一个user/currentUserUID。选项2,您看到的是getter,而不是名称空间的getter,我想这是一个模块配置问题,我试图简化到这一点(暂时忽略vuexfire)loadPendingHoursRequests({dispatch,commit,getters,rootGetters}){let uid=rootGetters['users/currentUser'];console.log(uid)}`具有有趣的结果。第一个控制台日志返回:{{uuuuu ob\uuuuuu:observer}。
但是如果我离开页面回来,我会得到我要找的对象。是的,我试过了,它说uid未定义。如果我离开页面并返回(即再次销毁和装载),那么UID就会出现,一切正常。不知何故,此函数必须在“users/currentUserUID”运行之前运行。听起来像是过早调用此操作导致的竞争条件。如何/何时填充getter?