Vue.js 如何从Vuex中的不同名称空间模块访问RootGetter?

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

我有一个名为“forms”的Vuex模块。我有一个名为“users”的不同模块(也有名称空间)

我正在使用Vuexfire(这是第一次,我认为这是让我绊倒的原因)。并且有一个这样的动作:

      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?