如何从 Vuex 中的不同命名空间模块访问 rootGetters?

时间:2021-02-16 20:11:27

标签: vue.js google-cloud-firestore vuex vuex-modules vuexfire

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

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

      const actions = {
      loadPendingHoursRequests: firestoreAction((context) => {
        context.bindFirestoreRef('pendingHoursRequests', db.collection('hours')
        .where('submittedToUID', '==', "iTd865JKWXRmhz2D2mtW7KIpL7a2"))
      }),

这按预期工作,并在 Firestore 和 Vuex 之间创建了实时连接。问题是我希望“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 也不起作用。

提前致谢。我很想知道我在这里不明白的地方。

1 个答案:

答案 0 :(得分:2)

未经测试(我不使用 VuexFire)但假设 bindFirestoreRef 需要 context 对象,您也可以访问 rootGetters 作为它的属性。将两个片段放在一起就像这样:

const actions = {
  loadPendingHoursRequests: firestoreAction((context) => {
    const uid = context.rootGetters['users/currentUserUID'];
    context.bindFirestoreRef('pendingHoursRequests', db.collection('hours')
      .where('submittedToUID', '==', uid))
  })
}