Eu tenho um componente com alguma validação de formulário. É um formulário de verificação de várias etapas. O código abaixo é para a primeira etapa. Eu gostaria de validar se o usuário inseriu algum texto, armazenar seu nome no estado global e então enviar para a próxima etapa. Estou usando vee-validate e vuex
<template>
<div>
<div class='field'>
<label class='label' for='name'>Name</label>
<div class="control has-icons-right">
<input name="name" v-model="name" v-validate="'required|alpha'" :class="{'input': true, 'is-danger': errors.has('name') }" type="text" placeholder="First and Last">
<span class="icon is-small is-right" v-if="errors.has('name')">
<i class="fa fa-warning"></i>
</span>
</div>
<p class="help is-danger" v-show="errors.has('name')">{{ errors.first('name') }}</p>
</div>
<div class="field pull-right">
<button class="button is-medium is-primary" type="submit" @click.prevent="nextStep">Next Step</button>
</div>
</div>
</template>
<script>
export default {
methods: {
nextStep(){
var self = this;
// from baianat/vee-validate
this.$validator.validateAll().then((result) => {
if (result) {
this.$store.dispatch('addContactInfoForOrder', self);
this.$store.dispatch('goToNextStep');
return;
}
});
}
},
computed: {
name: function(){
return this.$store.state.name;
}
}
}
</script>
Tenho uma loja para lidar com o estado do pedido e registrar o nome. Em última análise, gostaria de enviar todas as informações do formulário de várias etapas para o servidor.
export default {
state: {
name: '',
},
mutations: {
UPDATE_ORDER_CONTACT(state, payload){
state.name = payload.name;
}
},
actions: {
addContactInfoForOrder({commit}, payload) {
commit('UPDATE_ORDER_CONTACT', payload);
}
}
}
Quando eu executo este código, recebo um erro que Computed property "name" was assigned to but it has no setter.
Como vinculo o valor do campo de nome ao estado global? Eu gostaria que isso fosse persistente, de forma que mesmo se um usuário voltar uma etapa (depois de clicar em "Próxima etapa"), ele verá o nome que inseriu nesta etapa
v-for
em um calculado sem um setter lança este aviso também.