vue中使用elementui的表单的坑

问题 

1 vue项目的弹窗上的form表单验证,第一次点击新增时正常,第二次新增打开弹窗后由于表单内容为空,出会先这样的情况

2 解决这个问题,在执行新增的时候加上this.$refs[formName].resetFields()或者this.$refs[formName].clearValidate();

3、刷新界面后第一次点击新增出现这样"Cannot read property 'resetFields' of undefined"或者"Cannot read property 'clearValidate' of undefined",

  第二次点击新增没有报错没有新增,说明第二次没有报错。

问题分析:刷新界面后第一次新增,此时表单内的dom还没有加载完成就执行了"Cannot read property 'resetFields' of undefined"或者"Cannot read property 'clearValidate' of undefined",

  这样就导致报错。

4 修改为

5 父组件如何获取子组件的ref

父组件

<div>

<child></child>

</div>

子组件

<div>

<el-form ref="form"></el-form>

</div>

获取方法为给父组件添加ref,然后一层层的往下找,直到找到所需的ref为止

<div>

<child ref="people"></child>

</div>

this.$refs.people.refs.person

参考资料

https://www.jianshu.com/p/b0d667c02a9a

https://www.cnblogs.com/aidixie/p/10796654.html

Vue使用 Element UI 进行表单校验是一种常见的需求,Element UI 提供了便捷的表单组件和校验机制。以下是一个完整的示例,展示了如何实现基础的表单校验。 ### 表单校验的基本结构 Element UI 的 `el-form` 组件支持数据驱动的校验方式,可以通过 `model` 和 `rules` 属性定义表单字段及其规则。下面是一个简单的例子: ```vue <template> <el-form :model="form" :rules="rules" ref="formRef" label-width="120px"> <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-form-item label="年龄" prop="age"> <el-input-number v-model="form.age" :min="0" :max="150"></el-input-number> </el-form-item> <el-form-item> <el-button type="primary" @click="onSubmit">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { name: '', email: '', age: null, }, rules: { name: [ { required: true, message: '请输入姓名', trigger: 'blur' }, { min: 2, max: 10, message: '长度在2到10个字符之间', trigger: 'blur' }, ], email: [ { required: true, message: '请输入邮箱地址', trigger: 'blur' }, { type: 'email', message: '请输入正确的邮箱格式', trigger: ['blur', 'change'] }, ], age: [ { required: true, message: '请输入年龄', trigger: 'blur' }, { type: 'number', message: '年龄必须为数字', trigger: 'blur' }, ], }, }; }, methods: { onSubmit() { this.$refs.formRef.validate(valid => { if (valid) { alert('验证通过,提交表单'); } else { console.log('验证失败'); return false; } }); }, }, }; </script> ``` ### 实时校验与触发事件 Element UI 支持多种触发事件进行校验,例如 `blur`、`change` 等。通过配置 `trigger` 可以控制校验的时机。对于实时反馈的需求,可以结合 `@blur` 或 `@change` 事件手动触发校验[^1]。 例如,可以在输入框上添加一个 `@blur` 事件,并调用 `validateField` 方法对特定字段进行校验: ```vue <el-input v-model="form.name" @blur="validateName"></el-input> ``` 对应的 `methods` 定义如下: ```javascript methods: { validateName() { this.$refs.formRef.validateField('name', (errorMessage) => { if (errorMessage) { console.log('校验错误:', errorMessage); } else { console.log('校验通过'); } }); } } ``` ### 动态扩展校验规则 如果需要根据用户输入动态调整校验规则,可以通过编程方式修改 `rules` 对象。例如,当某个条件满足时,增加一个新的校验规则或修改现有规则的内容。 ```javascript this.rules.age.push({ validator: this.checkAge, trigger: 'blur' }); checkAge(rule, value, callback) { if (value < 18) { callback(new Error('年龄必须大于等于18岁')); } else { callback(); } } ``` ### 总结 通过上述方法,可以在 Vue 中灵活地使用 Element UI 进行表单校验,包括基本的字段校验、实时反馈以及动态规则扩展。这种设计能够满足大多数业务场景下的表单校验需求,并提供良好的用户体验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值