文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在Vue中如何实现添加全局store

2023-06-29 18:06

关注

小编给大家分享一下在Vue中如何实现添加全局store,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

Vue添加全局store

在命令行中输入安装

npm install --save vuex

在Vue中如何实现添加全局store

在main.js文件中引用

store和在new Vue中声明store

import store from './store'store,

在Vue中如何实现添加全局store

在src中创建一个page文件

在page文件下创建一个module的js文件(内容如下)

const state = {HomeStatus:{LoginStatus:false},Users:[],}const mutations = {['setuseinfo'] (state, data) {},}const actions = {}

在Vue中如何实现添加全局store

在src下创建一个store文件

在store文件下创建一个index的js文件

import Vue from 'vue'import Vuex from 'vuex'import page from '../page/module'Vue.use(Vuex)export default new Vuex.Store({state: {},modules:{page}})

在Vue中如何实现添加全局store

store使用方法讲解

vuex 包含有五个基本的对象

在Vue中如何实现添加全局store

import Vue from 'vue'import Vuex from 'vuex'import state from './state.js'import getters from './getters'import mutations from './mutations.js'import actions from './actions.js'//安装Vue Devtools调试工具https://blog.csdn.net/li22356/article/details/113092495//挂载Vuex,帮助手册https://www.jianshu.com/p/2e5973fe1223//模块化可参考https://www.yisu.com/article/150752.htmVue.use(Vuex);//创建VueX对象,单页面使用<h2>{{ $store.state.name }}</h2>console.log(this.$store.state.name)//新增state对象Vue.set(state,"age",15),删除Vue.delete(state,'age')const store = new Vuex.Store({  //存放数据,存放状态  //使用方法  state,  //加工state成员给外界  //state 当前VueX对象中的状态对象  // getters 当前getters对象,用于将getters下的其他getter拿来用  //组件使用this.$store.getters.fullInfo  getters,  //state成员操作,操作state数据的方法的集合,比如对该数据的修改、增加、删除等等。  //组件调用this.$store.commit('SET_TOKEN','new token')挂载方法  //同步处理  mutations,  //异步处理  //组件中使用this.$store.dispatch('aEdit','new TOKEN')  actions});export default () => {  return store}
import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({    //这里放全局参数,比如用户登录信息  state: {token: "helloVueX",    name: "",    age: ""  },  mutations: {    //这里是set方法,比如对该数据的修改、增加、删除等等。    //组件调用this.$store.commit('SET_TOKEN','new token')挂载方法    SET_TOKEN: (state, token) => {    state.token = token    console.log(state.token);  }  },  //getters 当前getters对象(可对对象进行二次更改),用于将getters下的其他getter拿来用,组件通过this.$store.getters.fullInfo拿来使用 getters: {  token: state => state.token,  nameInfo(state) {    return "姓名:" + state.name  },  fullInfo(state, getters) {    return getters.nameInfo + '年龄:' + state.age  } }, //异步处理//组件中使用this.$store.dispatch('aEdit','new TOKEN')  actions: {   QQlogin({commit}, token) {    return new Promise((resolve, reject) => {      setToken(token);         //把token存放到cookie里      commit('SET_TOKEN', token)     //commit调用mutations 数据      resolve()    })  },  aEdit(context, payload) {    return new Promise((resolve, reject) => {      setTimeout(() => {        context.commit('SET_TOKEN', payload)        resolve()      }, 2000)    })  }  },  modules: {//这里是我自己理解的是为了给全局变量分组,所以需要写提前声明其他store文件,然后引入这里  }})

vuex,module间的方法调用

我们用vuex时通常会分功能创建多的module,单个module里的操作大家应该很清楚,那多个module之间怎么调用了?

详细代码:

现在我有两个module:user 和 menu,要在user中调用menu的actions方法,操作如下:

const user = {  state: {    permissions: []  },  mutations: {    SET_PERMISSIONS: (state, permissions) => {      state.permissions = permissions    }  },  actions: {    getPermissions({commit}) {      queryPermissions().then(res => {        sessionStorage.setItem('permissions', JSON.stringify(res))        this.dispatch('setPermissions', res); // 调本module里的方法      })    },    setPermissions({commit, dispatch, state, rootState}, data) {      commit('SET_PERMISSIONS', data); // 本module的commit      dispatch('setMenuData', data); // 调menu里的方法      console.log(rootState.menu.menus); // 取menu里的参数    }  }} export default userconst menu = {  state: {    menus: []  },  mutations: {    SET_MENUS: (state, data) => {      state.menus = data    }  },  actions: {    setMenuData({commit, state}, data) {      commit('SET_MENUS', data);    }  }}export default menu

解释:

actions里各个方法的第一个参数其实有很多属性,只是我们平时习惯了解构的写法,如setMenuData({commit, state},data)。当把第一个参数的值全输出,如setMenuData(param,data),输出param会发现其中包含以下属性:

vue文件调用store的action方法 

const actions = {    // 根据权限动态生成路由    async generateRoutes({ commit }) {      // 执行代码    }}
created() {        this.generateRoutes()    },methods: {        ...mapActions('menu', [            'generateRoutes'        ])        }

看完了这篇文章,相信你对“在Vue中如何实现添加全局store”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯