elementUI plus el-form校验多个表单

同时提交两个表单时,需校验表单时,可通过Promise.all 控制两个表单都校验成功时才提交

注意:当两个form使用同一个ref 或者同一个model时 每个form-item下的校验提示会失效

<el-tabs>
	<el-tab-pane label="基本信息">
		<el-form :model="state.basicForm" ref="basicFormRef" size="default" label-width="100px" :disabled="state.formDisabled">
			<el-row :gutter="35">
				<el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8" class="mb20">
					<el-form-item label="编号" prop="personalInfoNum" :rules="[{ required: true, message: '编号不能为空', trigger: 'blur' }]">
						<el-input v-model="state.basicForm.personalInfoNum" placeholder="编号" clearable />
					</el-form-item>
				</el-col>
			</el-row>
		</el-form>
	</el-tab-pane>
	<el-tab-pane label="其他信息">
		<el-form :model="state.otherForm" ref="otherFormRef" size="default" label-width="100px" :disabled="state.formDisabled">
			<el-row :gutter="35">
				<el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8" class="mb20">
					<el-form-item label="奖惩情况" prop="reward" :rules="[{ required: true, message: '奖惩情况不能为空', trigger: 'blur' }]">
						<el-input v-model="state.otherForm.reward" clearable type="textarea" autosize />
					</el-form-item>
				</el-col>
			</el-row>
		</el-form>
	</el-tab-pane>
</el-tabs>
<el-row>
	<el-col :md="24" :sm="24" style="text-align: center; margin-top: 20px">
		<el-button type="primary" size="large" class="button" @click="submit">提交</el-button>
	</el-col>
</el-row>
<script lang="ts" setup name="person-add">
import { ref, reactive,} from 'vue';
const basicFormRef = ref();
const otherFormRef= ref();
const state=reactive({
	formDisabled: false, //表单整个禁用,新增/查看
	basicForm: {
		personalInfoNum:null
	},
	otherForm:{
		reward:''
	}
})
//检查每个表单的校验规则
const checkForm = (formName: any) => {
	return new Promise((resolve, reject) => {
		formName.value.validate((valid: boolean) => {
			if (valid) {
				resolve(1);
			} else reject();
		});
	});
};
// 提交
const submit = () => {
	let list = [];
	list.push(checkForm(basicFormRef), checkForm(otherFormRef));

	Promise.all(list)
		.then(async () => {
			await addPersonalInfo(parmas);//调用接口
		})
}
</script>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Vue 3 中,可以使用 `v-model` 指令的 `v-bind` 和 `v-on` 缩写语法糖结合 Element-Plus 中的 `el-form` 组件自定义校验规则。具体步骤如下: 1.在 `template` 中使用 `el-form` 组件包裹,并添加需要校验项。 ```html <el-form ref="form" :model="formData" :rules="rules"> <el-form-item label="用户名" prop="username"> <el-input v-model="formData.username"></el-input> </el-form-item> </el-form> ``` 其中,`:model` 属性绑定数据,`:rules` 属性绑定校验规则。 2.在 `data` 选项中定义数据及校验规则。 ```javascript data() { return { formData: { username: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { validator: this.validateUsername, trigger: 'blur' } ] } } }, ``` 其中,`rules` 对象中的 `username` 属性示需要校验项,`required` 示必填(不能为空),`validator` 示自定义校验方法,`trigger` 校验触发时机(此处为失去焦点时触发校验)。 3.定义自定义校验方法 `validateUsername`。 ```javascript methods: { validateUsername(rule, value, callback) { if (value.length < 6) { callback(new Error('用户名长度不能少于 6 个字符')) } else { callback() } } } ``` 其中,`rule` 示当前校验规则,`value` 示当前项的值,`callback` 是一个回调函数,用于返回校验结果。如果校验不通过,调用 `callback` 方法并传递一个 `Error` 对象,校验不通过并设置错误信息。如果校验通过,调用 `callback` 方法并不传递任何参数。 注意:在自定义校验方法中,需要使用 `callback` 方法返回校验结果,否则会出现校验无效的情况。 以上就是使用 Element-Plus 中的 `el-form` 组件结合 Vue 3 的语法糖自定义校验规则的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值