需求
vuex是乙個幫助我們集中管理vue元件狀態的狀態管理外掛程式,我們將模擬它的state、mutation、action、getter。在元件內,我們可以通過vm.sto
re.c
ommi
t()來
更改st
ate,
或者使用
vm
.store.commit()來更改state,或者使用vm.
store.
comm
it()
來更改s
tate
,或者使
用vm.
store.dispatch()來非同步地改變state,同時阻止使用者通過vm.sto
re.s
tate
=′′這
種方式直
接改變s
tate
;使用者可
以使
用store.state=''這種方式直接改變state;使用者可以使用
store.
stat
e=′′
這種方式
直接改變
stat
e;使用者
可以使用
store.getters()來獲取state,當state改變時,獲取的值也做相應的改變。
實現首先,我們建立乙個簡單的store
import vue from
'vue'
import vuex from
'./kstorevuex.js'
vue.
use(vuex)
export
default
newvuex.store(,
mutations:},
actions:
,2000)}
},getters:}}
)
和vue-router一樣,我們要實現乙個store類和install方法,但是注意我們使用的時候是new vuex.store,所以,kvuex檔案應該是這樣的
let vue
class
store
}function
install
(_vue)
export
default
同樣的,我們要在install方法中將$store掛到vue原型鏈上,方便元件來呼叫。
function
install
(_vue)}}
)}
在class store中,我們要實現getter、commit、dispatch這三個方法;和仿vue-router不同的是,我們建立響應式資料的方式有所變化,值得注意的一點是利用computed選項實現getter。
class
store
// 利用computed選項實現getter,避免this指向混亂,使用乙個變數儲存this
const store =
this
let computed =
// 遍歷vuex的getter配置項
object.
keys
(store._wrapgetters)
.foreach
(key =>
// 設定store.getter唯讀
object.
defineproperty
(store.getters, key,})
})// 建立乙個響應式的$$state屬性,不使用definereactive()方法是因為實現getter方法需要使用computed選項,state前面加兩個$可以不讓vue自動**$$state
this
._vm =
newvue(,
computed
})// 將commit和dispatch從this中解構出來
const
= store
this
.commit
=function
(type, payload)
this
.dispatch
=function
(type, payload)
}// 使用getter,返回state
getstate()
// 阻止使用者直接修改state
setstate
(val)
// 建立乙個commit方法和dispatch方法
commit
(type, payload)
entry
(this
.state, payload)
}dispatch
(type, payload)
entry
(this
.state, payload)
}}
如何使用vuex外掛程式
一.使用前需要做的事情 1.理解什麼是vuex?學習到vue之後最常見的就是使用父子元件傳值的問題,但是當我們在進行乙個較大型的新專案開發時候,元件關係較為複雜如果還堅持使用父子元件的話將會異常繁瑣,再加上有些資料需要幾個元件同時共享,所以這時候我們採用了vuex vue狀態管理模式 2.安裝vue...
使用vuex外掛程式方法
1.元件訪問state中資料的第一種方法 1 從vuex中按需引入mapstate函式 import from vuex 2 將全域性資料對映為當前元件computed計算屬性 computed 元件訪問state中資料的第二種方法 this.store.state.count 2.只能通過muta...
vue js模擬日曆外掛程式
今天要實現的功能就是一下這個功能 好了廢話不多說了 直接上 了 週日th 周一th 周二th 週三th 周四th 周五th 週六th tr thead v for a,index of calender.length 7 v for i of 7 class td tr tbody table di...