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里面的
    }
  }
相关文章
|
6天前
第8节:Vue3 全局访问
第8节:Vue3 全局访问
24 0
|
6天前
|
JavaScript
vue引用拼音组件
vue引用拼音组件
38 0
|
6天前
|
JavaScript
Vue定义全局组件的三种方式
Vue定义全局组件的三种方式
22 0
|
6天前
|
存储 JavaScript
Vue3使用Pinia获取全局状态变量
Vue3使用Pinia获取全局状态变量
73 4
|
6天前
|
存储
vuex 有哪几种属性?
vuex 有哪几种属性?
|
6天前
Vuex 为什么要分模块并且加命名空间
Vuex 为什么要分模块并且加命名空间
14 0
|
6天前
|
JavaScript 前端开发
Vue3中的混入到底指的啥?
Vue3中的混入到底指的啥?
36 0
|
6天前
|
存储 JavaScript 前端开发
【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用
【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用
58 0
|
6月前
|
前端开发 JavaScript
vue3全局组件-全局变量-base64-axios-封装
vue3全局组件-全局变量-base64-axios-封装
77 0
|
9月前
|
存储 缓存 JavaScript
vuex有哪几种属性?
vuex 是 Vue 配套的 公共数据管理工具,它可以把一些共享的数据,保存到 vuex 中,方便整个程序中的任何组件直接获取或修改我们的公共数据。