Element UI中的表单布局与自定义校验规则

编程灵魂画师 2019-05-08 ⋅ 22 阅读

在一些大型的前端项目中,表单是不可或缺的一部分,而Element UI作为一个优秀的前端UI库,提供了丰富的表单组件和功能,使我们能够更加方便地进行表单开发和校验。本文将介绍Element UI中的表单布局和自定义校验规则的使用方法。

表单布局

Element UI中的表单布局通过el-formel-form-item两个组件来实现。el-form是一个包裹表单元素的容器,负责管理表单元素的布局和提交事件。el-form-item是表单的一个子项,用来包裹每个表单元素,并提供相应的布局和样式。

表单布局实例

下面是一个简单的表单布局的示例:

<template>
  <el-form ref="form" :model="form" :rules="rules" label-width="100px">
    <el-form-item label="姓名" prop="name">
      <el-input v-model="form.name"></el-input>
    </el-form-item>
    <el-form-item label="年龄" prop="age">
      <el-input v-model="form.age"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
      <el-button @click="resetForm">重置</el-button>
    </el-form-item>
  </el-form>
</template>

上面的代码中,使用了el-form作为表单的容器,通过:model绑定了表单的数据模型form:rules绑定了表单的校验规则。label-width属性用来设置表单项的标签宽度。

el-form-item用来包裹每个表单元素,通过label属性设置表单项的标签名,prop属性设置表单项对应的数据模型的属性。

自定义校验规则

Element UI支持自定义校验规则来满足不同的业务需求。在Vue组件中,我们可以使用el-formrules属性绑定校验规则,通过一个对象的方式来定义每个表单项的校验规则。

自定义校验规则实例

下面是一个自定义校验规则的示例:

export default {
  data() {
    return {
      form: {
        email: '',
        password: ''
      },
      rules: {
        email: [
          { required: true, message: '邮箱不能为空', trigger: 'blur' },
          { type: 'email', message: '请输入正确的邮箱格式', trigger: ['blur', 'change'] }
        ],
        password: [
          { required: true, message: '密码不能为空', trigger: 'blur' },
          { min: 6, max: 16, message: '密码长度为6-16位', trigger: 'blur' }
        ]
      }
    };
  },
  methods: {
    submitForm() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          // 表单验证通过,提交表单
        } else {
          // 表单验证失败,处理错误信息
        }
      });
    },
    resetForm() {
      this.$refs.form.resetFields();
    }
  }
};

上面的代码中,通过rules属性定义了emailpassword两个表单项的校验规则。required表示必填项,message表示错误提示信息,trigger表示触发校验的事件。在点击提交按钮时,调用validate方法来进行表单校验,校验通过则继续提交表单,否则处理错误信息。

小结

通过Element UI提供的表单布局和自定义校验规则,我们能够更加方便地进行表单开发和校验。希望本文对大家有所帮助。如有错误或不足之处,请指正。


全部评论: 0

    我有话说: