Я создаю компонент, который можно использовать для установки различных свойств vuex, в зависимости от имени, переданного в маршруте. Вот наивная суть этого:
<template>
<div>
<input v-model="this[$route.params.name]"/>
</div>
</template>
<script>
export default {
computed: {
foo: {
get(){ return this.$store.state.foo; },
set(value){ this.$store.commit('updateValue', {name:'foo', value}); }
},
bar: {
get(){ return this.$store.state.bar; },
set(value){ this.$store.commit('updateValue', {name:'bar', value}); }
},
}
}
</script>
Обратите внимание, что я передаю this[$route.params.name]
в v-model
, чтобы сделать его динамичным. Это работает для настройки (компонент загружается нормально), но при попытке установить значение, я получаю эту ошибку:
Cannot set reactive property on undefined, null, or primitive value: null
Я предполагаю, что это потому, что this
внутри v-model
становится неопределенным (?)
Как я могу сделать эту работу?
UPDATE
Мне также было бы интересно узнать, почему это не работает (ошибка компиляции):
<template>
<div>
<input v-model="getComputed()"/>
</div>
</template>
<script>
export default {
computed: {
foo: {
get(){ return this.$store.state.foo; },
set(value){ this.$store.commit('updateValue', {name:'foo', value}); }
},
bar: {
get(){ return this.$store.state.bar; },
set(value){ this.$store.commit('updateValue', {name:'bar', value}); }
},
},
methods: {
getComputed(){
return this[this.$route.params.name]
}
}
}
</script>