el-form表单动态校验(场景: 输入框根据单选项来动态校验表单 没有选中的选项就不用校验)

文章讲述了在Vue组件中使用ElementUI的el-form进行动态校验的方法,当表单中的跳转类型选择改变时,相应输入项的校验规则会根据选择的不同而变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

el-form表单动态校验

el-form常规校验方式:

// 结构部分
<el-form ref="form" :model="form" :rules="rules">
	<el-form-item label="活动名称: " prop="name" required>
       <el-input v-model="form.name" />
    </el-form-item>
</el-form>

// script部分
<script>
export default {
  data() {
    return {
      form: {},
      rules: {
        name: [{ required: true, message: '请输入活动名称', trigger: 'blur' }]
      }
    }
  }
}

save() {
    this.$refs.form.validate((valid) => {
        if (valid) {
        	console.log('通过表单校验')
        }
    })
}

正题部分-表单动态校验
场景: 输入框根据单选项来动态校验表单
没有选中的选项就不用校验
在这里插入图片描述
效果: 在这里插入图片描述

<el-form ref="form" :model="form" :rules="rules">
	<el-form-item label="跳转类型: " prop="skipType" required>
        <el-radio-group v-model="form.skipType"">
          <el-radio :label="0" style="display: block; margin: 10px 0">无跳转</el-radio>
          <div>
            <el-radio :label="1" style="display: inline-block; margin: 11px 0">小程序内页</el-radio>
            <el-form-item
              label=""
              label-width="0"
              style="display: inline-block; height:20px"
              prop="insidePage"
              :rules="form.skipType === 1 ? rules.insidePage : []"
              :required="form.skipType === 1"
            >
              <!-- :rules="[{ required: true, message: '请输入小程序页面路径', trigger: 'blur' }]" -->
              <el-input
                v-model.trim="form.insidePage"
                placeholder="输入小程序页面路径"
                autocomplete="off"
                maxlength="20"
                style="width: 160px; margin-left: 10px"
              />
            </el-form-item>
          </div>
          <div>
            <el-radio :label="2" style="display: inline-block; margin: 11px 0 14px">外部小程序</el-radio>
            <el-form-item
              label=""
              label-width="0"
              style="display: inline-block"
              prop="outsideAppId"
              :rules="form.skipType === 2 ? rules.outsideAppId : []"
              :required="form.skipType === 2"
            >
              <el-input
                v-model.trim="form.outsideAppId"
                placeholder="输入小程序APPID"
                autocomplete="off"
                maxlength="20"
                style="width: 160px; margin-left: 10px"
              />
            </el-form-item>
         </div>
      </el-radio-group>
   </el-form-item>
</el-form>

// script部分
<script>
export default {
  data() {
    return {
      form: {},
      rules: {
        skipType: [{ required: true, message: '请选择跳转类型', trigger: 'change' }],
        insidePage: [{ required: true, message: '请输入小程序页面路径', trigger: 'blur' }],
        outsideAppId: [{ required: true, message: '请输入小程序appid', trigger: 'blur' }]
      }
    }
  }
}

save() {
    this.$refs.form.validate((valid) => {
        if (valid) {
        	console.log('通过表单校验')
        }
    })
}

关键点: 跟正常校验流程不同的是, el-form-item标签内的required和rules都要加上判断条件

:rules="form.skipType === 1 ? rules.insidePage : []"
:required="form.skipType === 1" 
### Element UI 中 `el-form` 的动态表单校验 在开发过程中,有时需要根据特定条件来决定哪些字段应该被校验以及何时触发这些校验逻辑。对于这种情况,在Element UI框架下可以通过编程方式调用API接口完成此操作。 当涉及到动态添加或移除表单时,可以利用Vue.js的数据绑定特性配合Element UI提供的`el-form-item`组件属性来进行处理。每当有新的输入框加入到页面上之后,应当立即更新对应的rules对象以确保新增加的部分也能得到有效的验证[^3]。 为了实现动态表单校验,下面是一个简单的例子: ```html <template> <div id="app"> <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic"> <!-- 静态部分 --> <el-form-item prop="email" label="Email地址:" required> <el-input v-model="dynamicValidateForm.email"></el-input> </el-form-item> <!-- 动态区域开始 --> <div v-for="(domain, index) in dynamicValidateForm.domains" :key="index"> <el-form-item :prop="'domains.' + index + '.value'" :label="'域名 ' + (index+1)" :rules="{required: true, message: '请输入域名', trigger: 'blur'}"> <el-input v-model="domain.value"></el-input> </el-form-item> <el-button @click.prevent="removeDomain(domain)">删除</el-button> </div> <el-button type="primary" @click="addDomain">新增域</el-button> <!-- 提交按钮 --> <el-form-item> <el-button type="success" @click="submitForm('dynamicValidateForm')">提交</el-button> </el-form-item> </el-form> </div> </template> <script> export default { data() { return { dynamicValidateForm: { email: '', domains: [{ value: '' }] } }; }, methods: { submitForm(formName) { this.$refs[formName].validate((valid) => { if (valid) { alert('提交成功!'); } else { console.log('错误的提交!!'); return false; } }); }, addDomain() { this.dynamicValidateForm.domains.push({ value: '' }); }, removeDomain(item) { var index = this.dynamicValidateForm.domains.indexOf(item); if(index !== -1){ this.dynamicValidateForm.domains.splice(index, 1); } } } }; </script> ``` 在这个案例里,通过点击“新增域”的按钮能够向表单中增加额外的文本框用于接收用户的输入,并且每一个新创建出来的目都会自动应用预定义好的规则集进行合法性检查。同样地,“删除”功能允许用户去除不再需要填写的信息条目而不影响其他已存在的内容[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值