Vuex全局码表mixins配置

简介: Vuex全局码表mixins配置

dicts.js mixins文件

//src\store\modules\dicts.js

import { getDictParamTableBatch } from '@/api/common/index'
import store from '@/store'
import Vue from 'vue'
class Dict {
  constructor(dict) {
    this.dict = dict
  }

  async init(names) {
    const ps = []
    const hash = {}
    names.forEach((name) => {
      if (store.getters.dicts[name]) {
        Vue.set(this.dict, name, store.getters.dicts[name])
      } else {
        Vue.set(this.dict, name, [])
        hash[name] = name
      }
    })
    const dictCodeList = Object.keys(hash).map(v => hash[v])
    ps.push(
      getDictParamTableBatch({ dictCodeList }).then((res) => {
        res.data.forEach(item => {
          this.dict[item.dictCode] = Object.freeze(item.dictParamTables)
          store.commit('dicts/SET_DICTS', {
            label: item.dictCode,
            value: Object.freeze(item.dictParamTables)
          })
        })
      })
    )
    await Promise.all(ps)
  }
}

const install = function(Vue) {
  Vue.mixin({
    data() {
      if (
        this.$options.dicts instanceof Array &&
                this.$options.dicts.length > 0
      ) {
        return { dict: {}}
      } else {
        return {}
      }
    },
    created() {
      if (
        this.$options.dicts instanceof Array &&
                this.$options.dicts.length > 0
      ) {
        new Dict(this.dict).init(this.$options.dicts)
      }
    }
  })
}

export default { install }

在main.js里面注册mixins

// 全局字典
import dict from '@/mixins/dicts.js'
Vue.use(dict)

getters里面定义

  dicts: state => state.dicts.dicts

页面中使用

  computed: {
    ...mapGetters(['dicts'])
  },
  dicts: ['bab005', 'bab007'],
  watch: {
    dict(v) {
      console.log(v)// 建议使用
    }
  },
  async mounted() {
    // 取值 this.dict['bab005'] 就能取到该字典
    const timer = setTimeout(() => { // 不推荐使用。网络差时会出现问题
      clearTimeout(timer)
      console.log(this.dict['bab005'])
    }, 1500)
  },
  methods: {
    // 详情
    detailClick() {
      this.isVisible = true
    },
    codeClick() {
      // 取值 this.dict['bab005'] 就能取到
      console.log(this.dict['bab005']) // 1.直接获取全局变量dict里面的
      console.log(this.dicts) // 2.取mapGetter里面的
      console.log(this.$store.getters.dicts) // 3.取store仓库getters里面的
    }
  }
相关文章
|
2月前
|
JavaScript
在 Vue 中处理组件选项与 Mixin 选项冲突的详细解决方案
【10月更文挑战第18天】通过以上的分析和探讨,相信你对在 Vue 中使用 Mixin 时遇到组件选项与 Mixin 选项冲突的解决方法有了更深入的理解。在实际开发中,要根据具体情况灵活选择合适的解决方案,以确保代码的质量和可维护性。
105 7
|
2月前
|
存储 JavaScript
vue——store全局存储
【10月更文挑战第18天】Vuex 是 Vue.js 应用中非常重要的一个工具,它为我们提供了一种有效的状态管理方式。通过合理地使用 Vuex,我们可以更好地组织和管理应用的状态,提高应用的开发效率和质量。
63 1
|
7月前
|
JavaScript
vue引用拼音组件
vue引用拼音组件
115 0
|
7月前
|
存储 JavaScript
Vue3使用Pinia获取全局状态变量
Vue3使用Pinia获取全局状态变量
251 4
|
7月前
|
存储
vuex 有哪几种属性?
vuex 有哪几种属性?
|
7月前
|
JavaScript
Vue定义全局组件的三种方式
Vue定义全局组件的三种方式
48 0
|
7月前
|
JavaScript 前端开发
Vue中mixins的作用是什么?有什么注意事项?
Vue中mixins的作用是什么?有什么注意事项?
54 3
|
7月前
|
JavaScript
Vue状态管理:什么是getters?Vuex中的getters有什么作用?
Vue状态管理:什么是getters?Vuex中的getters有什么作用?
245 3
|
7月前
Vuex 为什么要分模块并且加命名空间
Vuex 为什么要分模块并且加命名空间
48 0
|
7月前
|
存储 JavaScript 前端开发
【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用
【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用
110 0