Element UI表单验证如何做

Element UI 提供了丰富的表单验证规则,可以很方便地对表单数据进行验证。下面是一个使用 Element UI 表单验证的示例:

<template>
  <el-form
           style="width: 500px"
           label-width="100px"
           label-position="left"
           :disabled="false"
           label-suffix=":"
           :inline="false"
           :validate-on-rule-change="true"
           status-icon
           :model="form"
           :rules="rules"
           ref="form" >
    <el-form-item label="用户名" prop="username" :error="error" :validate-status="status">
      <el-input v-model="form.username" placeholder="请输入用户名"></el-input>
    </el-form-item>
    <el-form-item label="密码" prop="password">
      <el-input type="password" v-model="form.password" placeholder="请输入密码"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
      <el-button type="primary" @click="addRule">动态添加校验规则</el-button>
      <el-button type="success" @click="showSuccess">showSuccess</el-button>
      <el-button type="danger" @click="showError">showError</el-button>
      <el-button type="warning" @click="showValidating">校验中</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
export default {
  data() {
    return {
      error:"",
      status:"",
      form: {
        username: '',
        password: ''
      },
      rules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' },
          { validator: this.noSpaceValidator, trigger: 'change' }
        ]
      }
    };
  },
  methods: {
    // 自定义校验器,检查密码是否包含空格
    noSpaceValidator(rule, value, callback) {
      if (/\s/.test(value)) {
        callback(new Error('密码不能包含空格'));
      } else {
        callback();
      }
    },
    addRule() {
      const userValidator = (rule, value, callback) => {
        if (value.length > 3) {
          this.inputError = ''
          this.inputValidateStatus = ''
          callback()
        } else {
          callback(new Error('用户名长度必须大于3'))
        }
      }
      const newRule = [
        ...this.rules.username,
        { validator: userValidator, trigger: 'change' }
      ]
      this.rules = Object.assign({}, this.rules, { username: newRule })
    },
    showError() {
      this.status = 'error'
      this.error = '用户名输入有误'
    },
    showSuccess() {
      this.status = 'success'
      this.error = ''
    },
    showValidating() {
      this.status = 'validating'
      this.error = ''
    },
    submitForm() {
      this.$refs.form.validate(valid => {
        if (valid) {
          // 表单验证通过,执行提交操作
          console.log('表单验证通过,执行提交操作');
        } else {
          // 表单验证失败,提示错误信息
          console.log('表单验证失败,提示错误信息');
          return false;
        }
      });
    }
  }
};
</script>

在这个示例中,我们使用 el-form 组件包含了一个表单,其中的每个表单项使用 el-form-item 组件包裹,使用 v-model 指令双向绑定表单数据。我们还定义了 rules 对象,该对象定义了各个表单项的验证规则,包括验证规则的类型、验证失败时的提示信息和触发验证的事件。在表单提交时,我们使用 $refs.form.validate() 方法执行表单验证,如果验证通过则执行表单提交操作,否则提示错误信息。

在 Element UI 中,还提供了很多内置的验证规则,如 required、email、url、number 等,可以根据需要使用。如果内置的验证规则不能满足需求,我们还可以自定义验证规则,具体可以参考 Element UI 的文档。