vue3 elemet-plus中表单验证修改required,导致校验字段全部出现

前言:踩过的小坑,而且发现网上解决这个问题的几乎没有

问题:有一个需求:

享受优惠政策的时候,优惠政策类型必选,并且校验;

不享受的时候 ,优惠政策不必选;并且不校验

因为我这里用了表单校验,用了rules,所以有些操作不好操作

 解决方案:

---------------------------------------------------------------------------

 全部代码如下:

<template>:

<el-col :xs="24" :sm="16" :md="12" :lg="12" :xl="12" class="mb20">
    <el-form-item label-width="150px" label="享受优惠政策" prop="xsyhzc">
        <el-radio-group v-model="state.ruleForm.xsyhzc" @change="chooseSale">
            <el-radio label="1" size="large">是</el-radio>
            <el-radio label="0" size="large">否</el-radio>
        </el-radio-group>
    </el-form-item>
</el-col>
<el-col :xs="24" :sm="16" :md="12" :lg="12" :xl="12" class="mb20">
    <el-form-item label-width="150px" label="优惠政策类型" prop="yhzclx">
        <el-select 
        class="inputWidth" 
        :disabled="state.flagYHZCLX" 
        v-model="state.ruleForm.yhzclx" 
        placeholder="请选择"
        @change="clearYHZCLXVali"
        >
            <el-option v-for="item in state.optionYHZCLX" :key="item.code" :label="item.label" :value="item.code" />
        </el-select>
    </el-form-item>
</el-col>

< script>:

 //选择是否享受优惠类型
  const chooseSale=()=>{
	if(state.ruleForm.xsyhzc==='1'){
		state.flagYHZCLX=false
	}
	else{
		state.flagYHZCLX=true
		state.ruleForm.yhzclx = null
	}
	rules.yhzclx[0].required = !state.flagYHZCLX
	clearValidate()
  }

  // 清除全部验证
const clearValidate = (): void => {
	setTimeout(() => {
		formEl.value?.clearValidate();
	}, 30);
};

//选择优惠政策之后清除验证
  const clearYHZCLXVali = ()=>{
	formEl.value?.clearValidate('yhzclx')
  }



//初始化,一进来先判断是否享有优惠政策类型,因为我变量里默认定义state.flagYHZCLX为true
if(state.ruleForm.xsyhzc==='1'){
	state.flagYHZCLX = false
	rules.yhzclx[0].required = !state.flagYHZCLX
	clearValidate()
}

关于rules.yhzclx[0].required飘红问题,像下面这样写就可以解决了:

(rules.yhzclx as Array<FormItemRule>)[0].required = !state.flagYHZCLX

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于Vue 3和Element Plus的表校验,你可以按照以下步骤进行设置: 1. 首先,确保你已经安装了Vue 3和Element Plus,并在你的项目中引入它们。 2. 创建一个Vue组件,在其中定义你的表。 3. 在data属性中添加一个对象,用于存储表数据和校验规则。例如: ```javascript data() { return { form: { name: '', email: '' }, rules: { name: [ { required: true, message: '请输入姓名', trigger: 'blur' } ], email: [ { required: true, message: '请输入邮箱地址', trigger: 'blur' }, { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] } ] } } } ``` 在上面的例子中,我们定义了一个表对象`form`,其中包含了`name`和`email`字段。同时,我们定义了校验规则`rules`,对`name`和`email`字段进行校验。 4. 在模板中使用`el-form`和`el-form-item`标签来渲染表,并绑定校验规则和错误消息。例如: ```html <el-form :model="form" :rules="rules"> <el-form-item label="姓名" prop="name"> <el-input v-model="form.name"></el-input> </el-form-item> <el-form-item label="邮箱" prop="email"> <el-input v-model="form.email"></el-input> </el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form> ``` 在上面的例子中,我们使用了`prop`属性来指定校验规则的字段名,使用`v-model`指令将表数据绑定到输入框上。 5. 在组件的方法中,定义一个用于提交表的方法,并调用`this.$refs.form.validate()`来触发表校验。例如: ```javascript methods: { submitForm() { this.$refs.form.validate(valid => { if (valid) { // 表校验通过,可以进行提交操作 console.log('表校验通过'); } else { // 表校验不通过,进行错误提示 console.log('表校验不通过'); } }); } } ``` 在上面的例子中,我们使用了`this.$refs.form.validate()`方法来触发表校验,并在回调函数中判断校验结果。 这样,你就可以使用Vue 3和Element Plus进行表校验了。根据实际需求,你可以添加更多的校验规则和自定义错误消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值