参考:https://segmentfault.com/a/1190000015782272
vue 2.0+ 你的vue-cli项目中安装 vuex :
npm install vuex --save
然后 在src文件目录下新建一个名为vuex的文件夹,为方便引入并在vuex文件夹里新建一个index.js,里面的内容如下:
1 import Vue from 'vue'; 2 import Vuex from 'vuex'; 3 Vue.use(Vuex); 4 const store = new Vuex.Store({}); 5 6 export default store;
接下来,在 main.js里面引入store,然后再全局注入一下,这样一来就可以在任何一个组件里面使用this.$store了:
import Vuex from 'vuex' import store from './vuex/index'//引入store new Vue({ el: '#app', router, store,//使用store template: '<App/>', components: { App } })
说了上面的前奏之后,接下来就是纳入正题了,就是开篇说的state的玩法。回到vuex文件的index.js里面,我们先声明一个state变量,并赋值一个空对象给它,里面随便定义两个初始属性值;然后再在实例化的Vuex.Store里面传入一个空对象,并把刚声明的变量state仍里面:
1 import Vue from 'vue'; 2 import Vuex from 'vuex'; 3 Vue.use(Vuex); 4 const state={//要设置的全局访问的state对象 5 showFooter: true, 6 changableNum:0 7 //要设置的初始属性值 8 }; 9 const store = new Vuex.Store({ 10 state 11 }); 12 13 export default store;
实际上做完上面的三个步骤后,你已经可以用this.$store.state.showFooter或this.$store.state.changebleNum在任何一个组件里面获取showfooter和changebleNum定义的值了,但这不是理想的获取方式;vuex官方API提供了一个getters,和vue计算属性computed一样,来实时监听state值的变化(最新状态),并把它也仍进Vuex.Store里面,具体看下面代码:
1 import Vue from 'vue'; 2 import Vuex from 'vuex'; 3 Vue.use(Vuex); 4 const state={ //要设置的全局访问的state对象 5 showFooter: true, 6 changableNum:0 7 //要设置的初始属性值 8 }; 9 const getters = { //实时监听state值的变化(最新状态) 10 isShow(state) { //方法名随意,主要是来承载变化的showFooter的值 11 return state.showFooter 12 }, 13 getChangedNum(){ //方法名随意,主要是用来承载变化的changableNum的值 14 return state.changebleNum 15 } 16 }; 17 const store = new Vuex.Store({ 18 state, 19 getters 20 }); 21 export default store;
光有定义的state的初始值,不改变它不是我们想要的需求,接下来要说的就是mutations了,mutattions也是一个对象,这个对象里面可以放改变state的初始值的方法,具体的用法就是给里面的方法传入参数state或额外的参数,然后利用vue的双向数据驱动进行值的改变,同样的定义好之后也把这个mutations扔进Vuex.Store里面,如下: