首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vuexfire将Fi还原集合绑定到对象,而不是一个列表

Vuexfire将Fi还原集合绑定到对象,而不是一个列表
EN

Stack Overflow用户
提问于 2020-04-08 09:53:36
回答 2查看 1.4K关注 0票数 4

我的Firestore数据库中有以下集合:

我可以用以下方法绑定到我的vuex商店:

代码语言:javascript
复制
state: {
  assets: [],
},

actions: {
  bindAssets: firestoreAction(({ bindFirestoreRef }) => {
    return bindFirestoreRef('assets', db.collection('assets'))
  }),
},

然而,这将它们作为一个列表绑定到assets,即。

代码语言:javascript
复制
[
  {id: "id1" /* etc. */ },
  {id: "id2" /* etc. */ },
  {id: "id3" /* etc. */ },
]

在那里,我希望它被约束为:

代码语言:javascript
复制
{
  "id1": { /* etc. */ },
  "id2": { /* etc. */ },
  "id3": { /* etc. */ },
}

我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2020-04-08 13:13:05

如果要在对象中转换assets数组(通过绑定assets集合获得),如下所示

代码语言:javascript
复制
{
  "id1": { /* etc. */ },
  "id2": { /* etc. */ },
  "id3": { /* etc. */ },
}

下面的Vuex getter应该能做到这一点:

代码语言:javascript
复制
state: {
  assets: [],
},

actions: {
  bindAssets: firestoreAction(({ bindFirestoreRef }) => {
    return bindFirestoreRef('assets', db.collection('assets'))
  }),
},

getters: {
     assetsObj: state => {

         const arrayToObject = (array) =>
            array.reduce((obj, item) => {
                 obj[item.id] = item
                 return obj
            }, {})

        return arrayToObject(state.assets)

    }
}

更新您的评论(在聊天中):

如果只想绑定到一个文档,那么应该使用bindAssetDocassetDoc进行如下操作。

商店

代码语言:javascript
复制
state: {
    assets: [],
    assetDoc: null
},

mutations: vuexfireMutations,

actions: {
    bindAssetDoc: firestoreAction(({ bindFirestoreRef }, payload) => {
        return bindFirestoreRef('assetDoc', db.collection('assets').doc(payload.id))
    }),
    bindAssets: firestoreAction(({ bindFirestoreRef }) => {
        return bindFirestoreRef('assets', db.collection('assets'))
    })
}

通过/asset/:assetId打开的组件

代码语言:javascript
复制
<script>
//...
export default {
  created() {
    console.log('OK1');
    this.$store
      .dispatch('bindAssetDoc', { id: this.$route.params.assetId });
  }
};
</script>
票数 4
EN

Stack Overflow用户

发布于 2021-09-28 08:25:00

根据官方文件 of vuexfire,您需要使用{}而不是[]初始化状态。

代码语言:javascript
复制
state: {
  assets: {},  // instead of []
},
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61097916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档