上兩篇講了: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的方法依然不變