2017-10-17 1 views
0

Ich mache zur Zeit die folgenden:2 Wegbindung mit einer verschachtelten Eigenschaft innerhalb des Objekts. (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> 

Bin ich es über komplizieren? Die zweite Zeile in editItemName set() ist eine Problemumgehung, um die Funktion editItem set() auszulösen.

+0

können Sie erklären, was Sie zu acheive versuchen? Versuchen Sie eine 2-Wege-Datenbindung mit dem Speicher zu erreichen? – LiranC

+0

@LiranC Ja. Ich kann es mit einem einfachen State-Wert tun, aber wenn es verschachtelte Parameter hat, muss ich entweder tun, wie ich getan habe oder eine Commit für jeden Parameter im Store haben. Der Grund, warum mir das Beispiel gefallen hat, ist, dass ich auf diese Weise nur eine Mutation haben muss. –

Antwort

1

Check this article. es geht um Formen, aber es zeigt den Weg, um mit Vuex zu 2-Wege-Bindung zu erreichen.

zu Ihrem speziellen Fall, siehe den Code. telephone ist eine verschachtelte Eigenschaft in einem Objekt.

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

Kühl. Es sieht so aus, als ob ich was getan hätte - außerdem verwende ich dieselbe Mutation für jeden verschachtelten Parameter. Denkst du, ich sollte eine Mutation für jeden Parameter haben oder was ich mache, ist ok? Wird deine Antwort als richtig markieren, da ich denke, dass dies der richtige Weg ist! –

Verwandte Themen