上两篇讲了:vue
下面讲一下:node
安装vuexwebpack
npm install vuex --save
新建store.js文件:git
import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex) //建立Store实例 const store = new Vuex.Store({ // 存储状态值 state: { count:1 }, // 状态值的改变方法,操做状态值 // 提交mutations是更改Vuex状态的惟一方法 mutations: { increment(state){ state.count++; }, decrement(state){ state.count--; } }, // 在store中定义getters(能够认为是store的计算属性)。Getters接收state做为其第一个函数 getters: { }, actions: { } }) // 要改变状态值只能经过提交mutations来完成 export default store;
在main.js里面注入store;es6
... //引入store import store from './store.js' ... const app = new Vue({ router, store }).$mount('#main')
新建count.vue文件,并新建路由指向count组件参照vue-router的使用。
count.vue文件:github
<template> <div> <div>{{$store.state.count}}</div> <div> <span @click="increment">increment</span> <span @click="decrement">decrement</span> </div> </div> </template> <style> </style> <script> export default { data(){ return {}; }, methods:{ increment(){ this.$store.commit('increment') }, decrement(){ this.$store.commit('decrement') } } } </script>
效果图:web
因为使用单一状态树,应用的全部状态会集中到一个比较大的对象。当应用变得很是复杂时,store 对象就有可能变得至关臃肿。
为了解决以上问题,Vuex 容许咱们将 store 分割成模块(module)。每一个模块拥有本身的 state、mutation、action、gettervue-router
新建moduleA.js,moduleB.jsvuex
并修改store.js:npm
... import moduleA from './moduleA'; import moduleB from './moduleB'; ... Vue.use(Vuex) //建立Store实例 const store = new Vuex.Store({ modules:{ moduleA, moduleB //es6的写法,合并模块 } }) ...
在组件里面想访问到state须要用到
$store.state.moduleA.count $store.state.moduleB.Name
效果图:
mutations里面修改state的方法依然不变