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里面的
    }
  }
目录
打赏
0
0
0
0
13
分享
相关文章
|
10月前
|
Vue定义全局组件的三种方式
Vue定义全局组件的三种方式
62 0
vue项目定义全局常量并进行使用
vue项目定义全局常量并进行使用
287 0
如何在 Vue 中动态地添加或删除 Mixin
【10月更文挑战第18天】通过以上的分析和探讨,相信你对如何在 Vue 中动态地添加或删除 Mixin 有了更深入的理解。在实际开发中,你可以根据具体的需求和场景,灵活运用这些方法,以实现更加灵活和高效的应用开发。
131 4
vuex有哪几种属性?
vuex 是 Vue 配套的 公共数据管理工具,它可以把一些共享的数据,保存到 vuex 中,方便整个程序中的任何组件直接获取或修改我们的公共数据。
|
10月前
|
vuex 有哪几种属性?
vuex 有哪几种属性?
vue mixins混入优先级 局部全局混入
对于data定义属性,组件中定义属性覆盖mixins中同名字段 对于methods中的同名方法,组件内的方法覆盖mixins中的方法 对于相同的computed属性,组件的computed属性覆盖mixins内的computed属性 对于created、mounted等生命周期函数,mixins中生命周期函数优先执行(执行顺序按mixins中顺序),再执行组件中生命周期函数 watch监听,mixins中的watch监听先执行。
519 0
vue mixins混入优先级 局部全局混入
|
8月前
|
vue2【详解】mixins —— 抽离公共逻辑
vue2【详解】mixins —— 抽离公共逻辑
79 0

热门文章

最新文章