Vue 計算屬性 和 多元件混入使用經驗總結
阿新 • • 發佈:2021-10-03
場景:想讓一個物件在兩個元件A和B中混入,使用共同的方法,然後A元件中改變混入物件的值,B元件的值得到相應的改變,以最少的程式碼實現物件複用。
問題:物件都能夠成功混入到兩個元件中,但是A元件改變混入物件的值,B元件中混入物件的值不變。
原因分析:混入到兩個元件中的物件是被複制的,不是單例的,即兩個元件都拷貝了一份混入物件的副本,兩個物件之間的資料域是分開的,改變其中一個,另外一個不受影響。
解決方式:在第二個元件中加監聽事件,用於更新混入物件的值,這樣兩個元件中的被混入物件的值都更新了,此時可以使用公共的計算屬性,兩個元件中的值都會變化。
程式碼:
被混入的物件
export constdata = { name: 'data', data() { return { data:{ value1:1, value2:2, } } } }
元件B中寫監聽事件
//元件通訊 created(){ //全域性監聽事件(地圖上畫線) Bus.$on("data", (data) => { this.data= data; }); },
元件A中的資料改變後,呼叫元件B的監聽事件來改變元件B中混入物件的值。
Bus.$emit("data",this.data);