element-ui表单验证,value一直为undefined的一种可能解决方案

有很多人遇到过这个问题,但是一般都是因为prop没写对,或者没有在data里声明;但我遇到的情况这两者都不是。代码如下:

<template>
  <el-form :rules="rules">
    <el-form-item prop="value">
      <el-input v-model="form.value"/>
    </el-form-item>
  </el-form>
</template>

<script>
export default {
  data() {
    var validator = (rule, value, callback) => {
      if (!value) {
        console.log(value);
        callback(new Error('请输入'));
      } else {
        callback();
      }
    };
    return {
      form: {
        value: ''
      },
      rules: {
        value: [{ validator, trigger: 'blur' }]
      }
    };
  }
};
</script>

这里控制台会一直输出undefined。

排查之后发现,因为<el-form>标签没有绑定model……不是只给<el-input>绑定v-model就可以的,同时还要指定model。正确写法应该如下:

<template>
  <!--要在这里指定model-->
  <el-form :model="form" :rules="rules">
    <el-form-item prop="value">
      <el-input v-model="form.value"/>
    </el-form-item>
  </el-form>
</template>

<script>
export default {
  data() {
    var validator = (rule, value, callback) => {
      if (!value) {
        console.log(value);
        callback(new Error('请输入'));
      } else {
        callback();
      }
    };
    return {
      form: {
        value: ''
      },
      rules: {
        value: [{ validator, trigger: 'blur' }]
      }
    };
  }
};
</script>

总结一下,目前遇到的这个报错,有三种可能:

  1. <el-form-item>上的prop名称不对,应当与rules中的名称一致;
  2. 绑定的属性没有在data中声明;
  3. 没有在<el-form>上指定model。
### Vue 中使用 Element-UI 的 `el-checkbox-group` 组件结合文本框 在 Vue 应用程序中,可以轻松地将 `el-checkbox-group` 和输入框组合在一起以创建更复杂的表单。这允许用户不仅可以选择多个选项,还可以为每个选择提供额外的信息。 #### 基础结构设置 为了实现这一功能,首先需要安装并引入 Element UI 或者仅导入所需的组件: ```bash npm install element-ui --save ``` 接着,在 main.js 文件里注册整个库或按需加载特定部件[^1]。 #### HTML 部分定义 下面是一个简单的例子来展示如何把复选框组同文本区域关联起来: ```html <template> <div id="app"> <!-- 定义一个 el-form 表单 --> <el-form :model="form" label-width="80px"> <el-form-item label="活动形式"> <!-- 使用 v-model 将数据绑定到 form.selectedOptions 上 --> <el-checkbox-group v-model="form.selectedOptions"> <el-checkbox-button v-for="(item, index) in options" :label="item.value" :key="index">{{ item.label }}</el-checkbox-button> </el-checkbox-group> <!-- 动态渲染对应的 input 输入框 --> <div v-for="(inputField, idx) in form.inputs" :key="'input-' + idx" style="margin-top: 10px;"> {{ inputField.placeholder }}: <el-input v-model="inputField.value"></el-input> </div> <!-- 添加新 Input 按钮 --> <el-button type="primary" @click="addInput">新增</el-button> </el-form-item> <!-- 提交按钮 --> <el-form-item> <el-button type="success" @click="onSubmit">提交</el-button> </el-form-item> </el-form> </div> </template> ``` #### JavaScript 数据处理逻辑 接下来是脚本部分,这里管理着状态以及交互行为: ```javascript <script> export default { data() { return { // 初始化表单项的数据模型 form: { selectedOptions: [], // 存储已勾选项的数组 inputs: [] // 记录动态添加的文本框列表 }, // 可供选择的项目集合 options: [ { value: 'option1', label: '吃饭' }, { value: 'option2', label: '睡觉' }, { value: 'option3', label: '打豆豆' } ] }; }, methods: { addInput(event){ const lastSelectedOption = this.form.selectedOptions[this.form.selectedOptions.length - 1]; if (lastSelectedOption !== undefined && !this.isExisting(lastSelectedOption)) { this.form.inputs.push({ placeholder: "请输入关于 '" + this.getOptionLabelByValue(lastSelectedOption) + "' 的更多信息", value: '' }); } else { console.log('请先选择一项'); } }, isExisting(valueToCheck){ let result = false; for(let i=0; i<this.form.inputs.length;i++){ if(this.options.find(option => option.value === this.form.inputs[i].placeholder.split("'")[1]).value===valueToCheck){ result=true; break; } } return result; }, getOptionLabelByValue(value){ var foundItem=this.options.find(item=>item.value==value); return foundItem?foundItem.label:''; }, onSubmit(){ alert(JSON.stringify(this.form)); } } }; </script> ``` 此代码片段展示了如何通过监听用户的操作来自动生成新的 `<el-input>` 控件,并将其与相应的复选框联系起来。每当有新的条目被加入时,都会触发一次更新,从而保持界面同步显示最新的状态变化。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值