Vuex 是一個專爲 Vue.js 應用程序開發的狀態管理模式。它採用集中式存儲管理應用的全部組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 也集成到 Vue 的官方調試工具 devtools extension,提供了諸如零配置的 time-travel 調試、狀態快照導入導出等高級調試功能。vue
- state
- mutations
- getters
- actions
- modules
state裏面就是存放的咱們上面所提到的狀態
mutations就是存放如何更改狀態
getters就是從state中派生出狀態,好比將state中的某個狀態進行過濾而後獲取新的狀態。
actions就是mutation的增強版,它能夠經過commit mutations中的方法來改變狀態,最重要的是它能夠進行異步操做。
modules顧名思義,就是當用這個容器來裝這些狀態仍是顯得混亂的時候,咱們就能夠把容器分紅幾塊,把狀態和管理規則分類來裝。這和咱們建立js模塊是一個目的,讓代碼結構更清晰。
安裝vuex
cnpm install vuex --save-dev
那麼如何使用呢?
咱們以一個vue項目來講明下,這個項目也是我看的第一個項目,和做者溝通好了的。我在這裏只是簡單的來講一下實現的思路 算是借花獻佛吧 ,你們有興趣的能夠克隆下來好好琢磨
! 賣座電影git
export const CHANGE_LEFTNAV_STATUS = 'CHANGE_LEFTNAV_STATUS
咱們的sidebar.vue組件剛開始是看不到的,只有點擊頭部菜單的按鈕纔會出現,因此一開始這個側邊組件會有一個初始狀態,咱們能夠這樣去寫github
<div class="sidebar-container" @click='hideNav' v-show="show">
而後咱們在計算屬性中這樣寫vuex
show:function(){ return this.$store.getters.leftNavState }
import * as types from '../types' /** * App通用配置 */ const state = { leftNavState:false } const actions = { //左側導航欄的開關 changeLeftNavState({commit},status){ commit(types.CHANGE_LEFTNAV_STATUS,status) } } const getters = { leftNavState: state => state.leftNavState } const mutations = { [types.CHANGE_LEFTNAV_STATUS](state,status){ state.leftNavState = status } } export default { state, actions, getters, mutations }
這裏須要說明一個一個完整的module 須要包括四個部分state,getters actions mutations,state來存放須要操做的狀態 gettes相似於計算屬性,改變數據有隻能經過提交到mutations方式,一種是異步的,定義在actions而後提交到mutation,經過dispach來分發,另一種是同步的直接經過commit來觸發
而後咱們來實現側邊欄的點擊顯示
咱們在header.vue中這樣寫npm
<a class="go-menu" @click="showNav"><i class="icon iconfont icon-menu"></i></a>
而後在methods中這樣寫異步
showNav: function () { return this.$store.dispatch('changeLeftNavState', true) }
changeLeftNavState({commit},status){ commit(types.CHANGE_LEFTNAV_STATUS,status) } //actions中的事件須要提交到mutations const mutations = { [types.CHANGE_LEFTNAV_STATUS](state,status){ state.leftNavState = status } }
這樣倉庫中的state.leftNavState的值就變成了你傳入的值true。從而咱們就看到了側邊欄組件
一樣道理咱們若是要點擊隱藏這個組件那麼就在sidebar.vue中這樣寫ide
<div class="sidebar-container" @click='hideNav' v-show="show">
而後咱們在methods中這樣寫工具
methods:{ hideNav(){ this.$store.dispatch('changeLeftNavState',false) } }
具體vuex究竟是如何使用的,仍是須要你們本身去看文檔摸索的。任何項目均可以看作一個公式在我看來,咱們不須要死機公式,咱們要理解這個公式,這個公式就像一條線,能讓咱們一提起來vue就知道如何快速構建和實現一個vue項目,能夠試着本身總結下。這個項目必定會讓你學到不少的。this