Vuex-已将计算属性“名称”分配给但没有设置器

vue.js Vue.js

AEva伽罗

2020-03-10

我有一个带有表单验证的组件。这是一个多步骤结帐表格。下面的代码是第一步。我想验证用户是否输入了一些文本,将其名称存储在全局状态下,然后发送至下一步。我正在使用vee-validate和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>

我有一家商店,用于处理订单状态并记录名称。最终,我想将所有信息从多步骤表单发送到服务器。

export default {
  state: {
    name: '',
  },

  mutations: {
    UPDATE_ORDER_CONTACT(state, payload){
      state.name = payload.name;

    }
  },

  actions: {
    addContactInfoForOrder({commit}, payload) {
      commit('UPDATE_ORDER_CONTACT', payload);
    }
  }
}

当我运行此代码时,我得到一个错误 Computed property "name" was assigned to but it has no setter.

如何将名称字段中的值绑定到全局状态?我希望此设置保持不变,以便即使用户返回上一步(单击“下一步”后),他们也将看到他们在此步骤中输入的名称

第460篇《Vuex-已将计算属性“名称”分配给但没有设置器》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

2个回答
猴子蛋蛋 2020.03.10

对我来说,它正在改变。

this.name = response.data;

计算得出的结果如此;

this.$store.state.name = response.data;
LGO西里 2020.03.10

如果要进行v-model计算,则需要使用setter您想要在更新程序中执行的操作与更新后的值(可能将其写入$store,考虑到这是您的吸气剂从中获取的值)有关。

如果通过表单提交将其写回存储,则不需要v-model,只需设置即可:value

如果您想要一个中间状态,该状态保存在某个地方,但是在$store直到表单提交之前都不会覆盖源,则需要创建这样的数据项。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android