vuex 添加全局数据和使用(业务:vue将码表数据设为全局,进行调用)

问题

原来调用码表都是直接在页面或者组件中直接调用,但是由于本次需求调用的数据又多又杂,数据加载量达到 10M 多,页面加载就异常的慢。还有组件中也都需要用到,为了不重复调用接口,加重服务压力,决定使用 VueX 进行处理。

> 由于之前没接触过 vuex ,所以今天认真的看了一遍官网。https://vuex.vuejs.org/zh/ 
> 由于理解能力较差,翻阅了一位博主的文章进行参考。如果和我一样基础较差的,可以参考一下;
> https://www.cnblogs.com/mica/p/10757965.html
> 本次为学习记录,如有错误,请大家指正。

解决方式

第一步

根据官网项目规范,在 src 目录下 创建 store 文件夹及以下文件,如下图。在 modules 中创建业务文件 xxx.js,我这使用 getDicts.js 作为案例。
在这里插入图片描述

第二步(store/index.js)

在这里插入图片描述

第三步 (main.js中挂载)

在这里插入图片描述

第四步

由于只需要在初始的时候调用一次服务器,后期就只要使用,我就在Home.vue中调用。
home.vue为我主业务页的公共页面。

 mounted() {
      this.getDicts();//全局码表设置
    },
 methods: {
      //调用获取码表接口,util.getDicts  接口方法,根据自己的接口定义
      getDicts(){
         util.getDicts([
          "bc_registerType", //登记类型
          "GF2009_00004", //国籍
          "GF2009_00015", //证件种类
          "GF2009_00005", //民族
          "up_sex", //性别
          "GF2009_00006", //文化程度
          "GF2009_00022", // 职业
          "GF2009_00016", // 身份
          "up_whether", //是否
        ]).then((res) => {
        //============主要部分=============
          this.options = res.data
          this.$store.dispatch("getDictsAction",this.options)
          //==========主要部分-结束==============
        })
      }
      }
第五步(getDicts.js)

大家请根据自己的业务需求进行调整。

const getDicts = {
    state: { //设置全局访问的 state 对象,与初始值
        dictsData:{} //可以想成在 store.state下定义一个变量
    },
    getter: { //实时监听 state 值的变化并进行返回
        getDicts: dictsData => {
            return state.dictsData;
        }
    },
    mutations: { //修改 store 中的值唯一的方法
        ADD_DICTS (state,val){
            console.log("mutations",val);
            state.dictsData=val; //设置值
        }
    },
    actions: { //action 提交到 mutations ,不直接变更状态 ,【可异步操作】
        getDictsAction(context, val){
            context.commit('ADD_DICTS',val)  // ADD_DICTS 为 murations 中的方法名
        }
    }
}
export default getDicts;
第六步 页面中使用方式

通过 this.$store.state.getDicts.dictsData 获取数据。

实际问题

由于码表数据较大,页面已经展现,而我在data中赋值的数据就出不来了,通过切换菜单,发现只要一开始刷新的页面出不来数据。
解决方式:通过监听来二次赋值

  "$store.state.getDicts.dictsData":{
        handler: function (val){
          this.options=this.$store.state.getDicts.dictsData;
        }
      }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值