首先调窍,我們使用vuex來進行參數(shù)傳遞的情景通常都是全局的范圍低淡,也就是不方便直接使用 ‘:’傳遞參數(shù)的時候,但是這時候有一種情景寻狂,就是我們的目的是傳遞參數(shù)之后岁经,在接收到參數(shù)后,觸發(fā)一個方法蛇券。
按照通常的情況缀壤,使用‘:’傳遞參數(shù)之后朽们,使用watch監(jiān)聽參數(shù)改變,然后調(diào)用方法就行了诉位,但是使用vuex的時候怎么監(jiān)聽呢?
我們使用vuex獲取參數(shù)的時候是需要先調(diào)用一下getter方法
this.$store.getters. xxxx
這個可不好監(jiān)聽呢菜枷。還好苍糠,我們的vue提供了另一個屬性:computed,很多人把computed和watch經(jīng)常會混淆在一起啤誊,其實是兩個作用不同的屬性岳瞭,具體的這里也就不說了,網(wǎng)上應該很多他們的區(qū)別蚊锹,然后是現(xiàn)在瞳筏,怎么使用這個屬性呢?
首先牡昆,我先弄一個簡單的vuex.store文件:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
//這里放全局參數(shù)
demoValue:{}
},
mutations: {
//這里是set方法
setDemoValue(state,demoValue){
state.demoValue = demoValue
}
},
getters: {
//get方法
getDemoValue: state => state.demoValue
},
actions: {
},
modules: {
}
})
現(xiàn)在姚炕,我們可以通過使用:
this.$store.commit('setDemoValue', value);
this.$store.getters. getDemoValue
兩個方法來進行傳值和取值了,接下來我們需要實現(xiàn)監(jiān)聽demoValue值得改變:
export default () {
computed: {
demoValue() {
//computed是計算屬性丢烘,state里面的demoValue改變之后柱宦,就會進行一次計算,并返回計算值到對應的參數(shù)中
return this.$store.state.demoValue;
}
},
watch: {
//監(jiān)聽屬性播瞳,在computed計算屬性更改之后會觸發(fā)參數(shù)值的改變掸刊,所以能夠監(jiān)聽到
demoValue(newValue, oldValue) {
console.log(`參數(shù)改變了:`,this.$store.getters. getDemoValue)赢乓;
// TODO 這里會在commit之后觸發(fā)忧侧,然后做后續(xù)的操作
}
}
}
現(xiàn)在我們在使用
this.$store.commit('setDemoValue', value);
修改參數(shù)的時候就會觸發(fā)這個監(jiān)聽事件了。