2017-10-17 75 views
0

我目前做如下:2種方式與對象內嵌套的屬性綁定。 (VueJS + VueX)

<script> 
export default { 
    computed: { 
    editingItem: { 
     get() { 
     return this.$store.getters['editing/editingItem']; 
     }, 
     set(newValue) { 
     this.$store.commit('editing/UPDATE_EDITING', newValue); 
     } 
    }, 
    editingItemName: { 
     get() { 
     return this.editingItem.name; 
     }, 
     set(newValue) { 
     this.editingItem.name = newValue; 
     this.editingItem = this.editingItem; 
     } 
    } 
    }, 
} 
</script> 

我是不是在複雜呢? editingItemName set()的第二行是解決方法,使editItem set()函數觸發。

+0

你能解釋一下你正在試圖acheive什麼?你是否試圖實現與商店的雙向數據綁定? – LiranC

+0

@LiranC是的。我可以用一個簡單的狀態值來做到這一點,但是如果它有嵌套的參數,我不得不像我做過的那樣做,或者爲Store上的每個參數提交一個提交。我喜歡這個例子的原因是,這樣我只需要有一個突變。 –

回答

1

Check this article。它是關於表單的,但是它展示了用vuex實現雙向綁定的方法。

關於您的特殊情況,請參閱代碼。 telephone是對象內部的嵌套屬性。

myModule.js

const myModule = { 
    state: { 
    customerInfo: { 
     name: '', 
     telephone: '' 
    } 
    }, 
    getters: { 
    getTelephone(state) { 
     return state.customerInfo.telephone 
    } 
    }, 
    mutations: { 
    setTelephone(state, payload) { 
     state.customerInfo.telephone += payload 
    }, 
    } 
} 
export default myModule; 

form.vue

<template> 
    <div> 
    <input v-model="telephone"></input> 
    </div> 
</template> 

<script> 
export default { 
    computed: { 
    telephone: { 
     get() { 
     return this.$store.getters['getTelephone'] 
     }, 
     set(value) { 
     this.$store.commit('setTelephone', value) 
     } 
    }, 
    } 
} 
</script> 
+0

很酷。它看起來像我正在做的 - 除此之外,我對每個嵌套參數重複使用相同的突變。你認爲我應該對每個參數進行一次突變,或者我正在做的是好的嗎?將您的答案標記爲正確,因爲我認爲這是現在的方式! –