我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在Vue中实现添加全局store

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在Vue中实现添加全局store

Vue添加全局store

在命令行中输入安装

npm install --save vuex

在main.js文件中引用

store和在new Vue中声明store

import store from './store'
store,

在class="lazy" data-src中创建一个page文件

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

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

在class="lazy" data-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
}
})

store使用方法讲解

vuex 包含有五个基本的对象

  • state存储状态。也就是变量;
  • getters派生状态。也就是set、get中的get,有两个可选参数:state、getters分别可以获取state中的变量和其他的getters。外部调用方式:store.getters.personInfo()。就和vue的computed差不多;
  • mutations提交状态修改。也就是set、get中的set,这是vuex中唯一修改state的方式,但不支持异步操作。第一个参数默认是state。外部调用方式:store.commit(‘SET_AGE’, 18)。和vue中的methods类似。
  • actions:和mutations类似。不过actions支持异步操作。第一个参数默认是和store具有相同参数属性的对象。外部调用方式:store.dispatch(‘nameAsyn’)。this.$store.dispatch(‘user/login’, this.loginForm)
  • modules:store的子模块,内容就相当于是store的一个实例。调用方式和前面介绍的相似,只是要加上当前子模块名,如:store.a.getters.xxx()。

在这里插入图片描述

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.jb51.net/article/150752.htm
Vue.use(Vuex);
//创建VueX对象,单页面使用<h1>{{ $store.state.name }}</h1>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 user
const 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'
        ])
        }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

免责声明:

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

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

在Vue中实现添加全局store

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

小编给大家分享一下在Vue中如何实现添加全局store,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Vue添加全局store在命令行中输入安装npm install --save vuex在main.js文件中引用stor
2023-06-29

vue项目中怎么实现全局引入jquery

这篇文章主要介绍“vue项目中怎么实现全局引入jquery”,在日常操作中,相信很多人在vue项目中怎么实现全局引入jquery问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue项目中怎么实现全局引入jqu
2023-07-02

正确在Flutter中添加webview实现详解

这篇文章主要为大家介绍了正确在Flutter中添加webview实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-08

jsp支持如何实现添加在Spring boot中

今天就跟大家聊聊有关jsp支持如何实现添加在Spring boot中 ,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。spring boot添加对jsp的支持,以下是pom.xml文件
2023-05-31

怎么在python中实现全局图像二值化

本篇文章给大家分享的是有关怎么在python中实现全局图像二值化,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python的五大特点是什么python的五大特点:1.简单易学,
2023-06-14

编程热搜

目录