VUE+element-ui使用rules做form表单的校验

学海无涯,旅“途”漫漫,“途”中小记,如有错误,敬请指出,在此拜谢!

前言

最为一个java后台人员,最近在学习编写VUE。发现很多功能的输入框都需要校验,百度了一下vue和element-ui,可以使用rules进行校验。所以记录此次学习过程,供小伙伴们使用。

步骤

1.配置el-form

在你的form表单中增加rules的配置,如

<el-form ref="addParam" :rules="rules" :model="addParam" label-width="120px">
	...
</el-form>

2.配置el-form-item

在对应的字段增加prop属性,如(注意此处prop属性要跟步骤3对应)

<el-form ref="addParam" :rules="rules" :model="addParam" label-width="120px">
	 <el-form-item label="此处为金额" prop="hourPrice">
     	<el-input v-model="addParam.price" placeholder="请输入"></el-input>
     </el-form-item>
</el-form>

3.配置规则

在export default的data中增加rules的规则配置

export default {
    ...
    data() {
        return {
            ...
            rules: {
                price: [{ required: true, message: '不能为空', trigger: 'blur' }]
            },
            ...
        }
    },

4.提交时增加方法

通过上述方法配置,如果鼠标点击对应input框,但是没有填写,光标移除后就会出现下图样式
在这里插入图片描述
不过如果只按照上面配,在保存的时候,是不会有强行验证的,所以还需要加个验证

   saveAdd() {
       this.$refs['addParam'].validate(valid => {//此处为验证,refs里面为form表单的ref定义名称
           if (!valid) {//如果验证不通过,则不走下面的方法内容
               return false;
           }
       });
       ....
   }

通过以上四步,则可以完成表单的校验功能

5.其他

如果element-ui的验证不满足自己的校验方式(比如要验证电话号码,验证是否为整数等),则可以通过下面方法处理
(1)增加一个js,添加自定义的验证js,方法可参考

https://www.cnblogs.com/lieone/p/11856330.html

比如引入方法validateNumber

/**
 * 纯数字校验
 * @param rule
 * @param value
 * @param callback
 */
export function validateNumber (rule, value, callback) {
  let numberReg = /^\d+$|^\d+[.]?\d+$/
  if (value !== '') {
    if (!numberReg.test(value)) {
      callback(new Error('请输入数字'))
    } else {
      callback()
    }
  } else {
    callback(new Error('请输入值'))
  }
}

(2)vue页面引入此js的具体方法,如

import {validateNumber} from '../../utils/validate'

(3)在方法3的配置规则中,修改为如下即可

price: [{ required: true, message: '不能为空', trigger: 'blur' },{validator:validateNumber,trigger:'blur'}],
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供代码示例,实现用 Vue Element-UI 封装一个带有分块、包含 el-form 的 el-tabs 组件。代码如下: ```vue <template> <div class="xs-tabs-form-container"> <el-tabs v-model="activeTab" style="height: 100%"> <el-tab-pane :label="pane.label" :key="index" v-for="(pane, index) in tabPanes"> <el-form :model="formData" :rules="formRules" ref="xsForm" label-width="100px"> <el-row :gutter="20" v-for="(element, rowIndex) in pane.elements" :key="rowIndex"> <el-col :span="12" v-for="(item, colIndex) in element" :key="colIndex"> <el-form-item :label="item.label" :prop="item.prop"> <template v-if="item.custom"> <slot :name="item.prop" :item="item"></slot> </template> <template v-else> <el-input v-model="formData[item.prop]"></el-input> </template> </el-form-item> </el-col> </el-row> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </el-tab-pane> </el-tabs> </div> </template> <script> export default { name: "XsTabsForm", props: { tabPanes: { type: Array, // [{label: 'Tab 1', elements: [[{label: 'Field 1', prop: 'field1'}]]}] required: true }, rules: { type: Object, // {field1: [{required: true, message: '不能为空', trigger: 'blur'}]} required: true } }, data() { return { activeTab: 0, formData: {} }; }, computed: { formRules() { const rules = {}; for (let key of Object.keys(this.formData)) { if (this.rules[key]) { rules[key] = this.rules[key]; } } return rules; } }, methods: { submitForm() { this.$refs['xsForm'].validate((valid) => { if (valid) { this.$emit('submit-form', this.formData); } else { this.$message.error('表单校验失败,请检查输入'); } }); } } }; </script> <style scoped> .xs-tabs-form-container { height: 100%; } </style> ``` 您可以通过 `tabPanes` 和 `rules` 两个参数传递组件中的标签页面和表单控制参数。每个标签页面可以包含多个行,每行包含多个表单项。可以选择使用默认的输入框,也可以通过 `item.custom` 参数自定义表单控件。您可以在 `submit-form` 事件中获取表单数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Doubletree_lin

老板,爱你,么么哒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值