前言
首先,因為我有一個需求就是vue組件中有一組多選框,選中多選框的內容,要在另一個組件中進行視圖更新,這個就設計的兄弟組件之間的通信了,兄弟組件之前通信我首先選用的vuex這個解決辦法。
問題
vuex的state用來放數據,我就把數組放在了vuex中,然后設置了修改的函數。最終store.js中的代碼如下:
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const state = { messArray:[] } const mutations = { modifyArray(state, obj){ state.messArray=obj.messArray // Vue.$set(this,this.messArray,[...obj.messArray]) } const actions={ modifyArr(context,obj){ context.commit('modifyArray',obj) }, } export default new Vuex.Store({ state, mutations, actions })
然后在組建的data中,通過mapState映射過去:
//在使用事前必須引入這個 import { mapState, mapGetters, mapMutations, mapActions } from 'vuex' data() { return { ...mapState(["messArray"]), } }
然后在watch中設置了監聽:
watch:{ messArray: function(val){ console.log("watch ChildA.vue "+val) } }
這個時候問題就出來了,雖然數組修改了,但是watch就是監聽不到。
解決辦法
在我搜索了一些網上的辦法之后,發現大部分我都用不來,最后只能巧妙的通過computed和getter解決了這個問題。
給剛才的store.js添加一個getter
const getters = { messArray_get:state=>state.messArray, }
然后在要監聽變化的組件中的computed中添加如下代碼:
...mapGetters(['messArray_get']),
然后在watch中這樣寫
watch:{ messArray_get : function(val){ console.log("messArray_get "+val) } }
大功告成,就是如此簡單巧妙。
以上這篇vuex state中的數組變化監聽實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持谷谷點程序。
轉載請注明:谷谷點程序 » vuex state中的數組變化監聽實例