项目用到了状态管理工具 Vuex  中文文档:https://vuex.vuejs.org/zh/guide/

大家都知道,vue中可用props将父组件的数据传递给子组件,但是有个问题,子组件一般不能修改父组件的数据,这时候vuex就派上用场

1、vuex 安装:npm install vuex --save

2、在src中新建一个store文件夹:本人目录结构如下:

 3、在main.js 中引入:

import store from './store'

new Vue({
el: '#app',
router,
store,
components: { App },
template: '<App/>'
})

 4、这里用到了vuex的modules

在store文件夹中的index.js 中引入modules中的模块,并导入到store中

import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
import account from './modules/account'
import user_list from './modules/userList'
import nav_router from './modules/navRouter' Vue.use(Vuex) // const debug = process.env.NODE_ENV !== 'production' export default new Vuex.Store({
modules: {
user,
account,
user_list,
nav_router,
},
// strict: debug,
})

5、modules 中的文件:

包含state、getter、actions、mutations。这里就不一一介绍了,文档里都有用法以及介绍。

import api from 'api/fetch'
import * as types from '../types' const state = {
token: '',
userName: localStorage.getItem('userName') ? localStorage.getItem('userName') : '',
role_id: sessionStorage.getItem('role_id') ? sessionStorage.getItem('role_id') : '',
} const getters = {
userName: state => {
return state.userName
},
roleId: state => state.role_id
} const actions = {
userLogin({ commit }, palyload) {
return api.Login(palyload)
.then( res => {
localStorage.setItem('user_token_key', res.data.token)
localStorage.setItem('userName', res.data.username)
sessionStorage.setItem('role_id', res.data.role_id)
commit(types.USER, res.data)
return res
})
}
} const mutations = {
[types.USER](state, datas) {
state.userName = datas.username
state.token = datas.token
state.role_id = datas.role_id
}
} export default {
state,
getters,
actions,
mutations,
}

6、在组件中如何获取vuex中的数据呢或者怎么触发vuex的钩子呢,以state为列子。

  本人在vue组件中获取state,主要用2中方式

  1、vuex提供的mapState: 在组件中

    

import { mapState } from 'vuex'

computed: {
...mapState({
totalItem: state => state.user_list.user_list_totalItem,
user_list_loading: state => state.user_list.user_list_loading,
})
},

  2、在组件中用this.$store.user.state 访问(这里要注意用了modules 之后要在user modules上访问state,否则访问的为undefined)

  3、其他的钩子都有对应的触发方式,可前往文档中了解

记一次vue+vuex+vue-router+axios+elementUI开发(三)的更多相关文章

  1. 记一次vue+vuex+vue-router+axios+elementUI开发(一)

    记录自己的vue开发之旅,方便之后查询 一.开发环境 1.安装node.js  自带npm https://nodejs.org/en/ 2. 全局安装vue-cli脚手架 npm install v ...

  2. 记一次vue+vuex+vue-router+axios+elementUI开发(二)

    开发环境跟脚手架初始完毕后,我们开始配置axios请求后台接口   axios使用说明:https://www.kancloud.cn/yunye/axios/234845 1.本人是在脚手架中的sr ...

  3. vue全家桶router、vuex、axios

    main.js import Vue from 'vue' import App from './App' import router from './router' import store fro ...

  4. day 87 Vue学习六之axios、vuex、脚手架中组件传值

      本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的使用 Axios 是一个基于 promise 的 HT ...

  5. vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据

    在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今天这边博文用来记录这一整个的过程,后台api接口是使用webpack-se ...

  6. Vue(5)- axios、vuex

    一.内容回顾 1.webpack(前端中工作,项目上线之前对整个前端项目优化) - entry:整个项目的程序入口(main.js或index.js): - output:输出的出口: - loade ...

  7. day 84 Vue学习六之axios、vuex、脚手架中组件传值

    Vue学习六之axios.vuex.脚手架中组件传值   本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的 ...

  8. 基于Vue+Vuex+Vue-Router+axios+mint-ui的移动端电商项目

    第一步:安装Node 1.打开NodeJS的官网,下载和自己系统相配的NodeJS的安装程序,包括32位还是64位一定要选择好,否则会出现安装问题. 下载地址:https://nodejs.org/e ...

  9. vue 组件开发、vue自动化工具、axios使用与router的使用(3)

    一. 组件化开发 1.1 组件[component] 在网页中实现一个功能,需要使用html定义功能的内容结构,使用css声明功能的外观样式,还要使用js定义功能的特效,因此就产生了一个功能先关的代码 ...

随机推荐

  1. TreeView树,全选,反选,平级选操作

    首先事件选择,选择的是MouseUp事件.为啥?因为凡是跟Check有关的,在选中父节点或者子节点,都会二次触发.然后发生的就是死循环. Up事件就可以避免二次触发.Down事件呢?那就触发After ...

  2. C# 查看系统进程

    //使用前需要引用 using System.Diagnostics; var processList = Process.GetProcesses().ToList();

  3. Java自学-数字与字符串 比较字符串

    Java 比较字符串 示例 1 : 是否是同一个对象 str1和str2的内容一定是一样的! 但是,并不是同一个字符串对象 package character; public class TestSt ...

  4. Django:RestFramework之-------解析器

    7.解析器 依靠Content-Type对用户的请求体中的数据进行解析. 7.1django中的解析器 前戏:django中的request.POST/request.body request.POS ...

  5. 禁用浏览器自动给input填充账号和密码

    如果input输入框type为text,设置autoComplete="off" <el-input v-model="ruleForm.loginId" ...

  6. JCEF-鼠标右键菜单

    为鼠标添加自定义菜单,比较简单,实现一个Handler就行 Hanler实现类 public class MenuHandler extends CefContextMenuHandlerAdapte ...

  7. springboot:使用JPA-Hibernate

    步骤: 在pom.xml文件中添加mysql,spring-data-jpa的依赖. <!-- 添加mysql数据库驱动依赖--> <dependency> <group ...

  8. memcpy函数的实现

    1.按1个字节拷贝 (1)不要直接使用形参,要转换成char* (2)目标地址要实现保存 (3)要考虑源和目标内存重叠的情况 void * mymemcpy(void *dest, const voi ...

  9. python之处理excel表格

    xlrd ​ xlrd是python中一个第三方的用于读取excle表格的模块,很多企业在没有使用计算机管理前大多使用表格来管理数据,所以导入表格还是非常常用的! 安装xlrd pip install ...

  10. AM335X UBOOT(以UART为例分析UBOOT主要流程)

    UBOOT2016.05 UART初始化及设置 SPL阶段 第一部分C函数 |- s_init //(arch/arm/cpu/armv7/am33xx/board.c) |- set_uart_mu ...