javascript - Určiť hodnotu objektu s vuex v-model


Koordinujem vstupné prvky s kľúčmi objektu v stave Vuex. Povedzme, že mám tento objekt:

myObj: { foo: 1, bar: 2 }

A počítaná vlastnosť v komponente:

myObjVals: {
  get(){ return this.$store.state.myObj },
  set(//?) { //? },
},

V šablóne môžem získať hodnoty z obchodu:

<input type="number" v-model="myObjVals['foo']"/>  // displays "1"
<input type="number" v-model="myObjVals['bar']"/>  // displays "2"

Ale keď nastavím hodnotu na vstupe, dostanem chybu: „Nemeníte stav vuex store mimo handlerov mutácií.“

Jedným z očividných riešení je mať inú vypočítanú vlastnosť pre každý kľúč v myObj... ale pri väčších objektoch je to opakujúce sa a zdĺhavé. Zaujímalo by ma, či existuje nejaký spôsob, ako to zakódovať tak, ako sa to snažím vyššie, teda použitím len jednej vypočítanej vlastnosti na odkazovanie na objekt pre obe funkcie get a set vo v-model.

Odpoveď č. 1

Ešte raz premýšľaj o svojom probléme. Jedno riešenie by mohlo byť niečo, čo je navrhnuté tu: https://vuex.vuejs.org/guide/forms.html

<input type="number" :value="myObjVals['foo']" @input="changeMyObj('foo', $event)"/>  // displays "1"
<input type="number" :value="myObjVals['bar']" @input="changeMyObj('bar', $event)"/>  // displays "2"

s vypočítanou vlastnosťou a metódou:

computed: {
    myObjVals: function () {
        return this.$store.state.myObj
    }
},
methods: {
    changeMyObj(key, evt) {
        this.$store.commit('changeMyObj', {key: key, value: evt.data})
    }
}

S mutáciou vo vnútri obchodu:

mutations: {
  changeMyObj(state, objInput) {
    state.myObj[objInput.key] = objInput.value
  }
}

Tu je „fungujúci“ fiddle: http://jsfiddle.net/zfab6tzp/346/

Nie som si istý, či je toto najlepšie možné riešenie, ale zdá sa, že to funguje