在Vue3+TypeScript+Element-plus项目中,可以使用Element-plus提供的表单校验功能来实现表单校验。以下是一个示例,展示如何实现表单校验和自定义校验。 首先,确保你已经安装了Element-plus和相关的依赖:

npm install element-plus --save
npm install @vue/compiler-sfc --save-dev

接下来,创建一个表单组件,例如

Form.vue

<template>
  <el-form
    :model="form"
    :rules="rules"
    ref="form"
    label-width="100px"
    style="max-width: 400px; margin: 0 auto;"
  >
    <el-form-item label="用户名" prop="username">
      <el-input v-model="form.username"></el-input>
    </el-form-item>
    <el-form-item label="密码" prop="password">
      <el-input type="password" v-model="form.password"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
    </el-form-item>
  </el-form>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue';
import { ElForm, ElFormItem, ElInput, ElButton } from 'element-plus';

export default defineComponent({
  name: 'Form',
  components: {
    ElForm,
    ElFormItem,
    ElInput,
    ElButton,
  },
  setup() {
    const form = ref({
      username: '',
      password: '',
    });

    const rules = {
      username: [
        { required: true, message: '请输入用户名', trigger: 'blur' },
        { min: 3, max: 10, message: '用户名长度在 3 到 10 个字符', trigger: 'blur' },
      ],
      password: [
        { required: true, message: '请输入密码', trigger: 'blur' },
        { min: 6, max: 20, message: '密码长度在 6 到 20 个字符', trigger: 'blur' },
      ],
    };

    const submitForm = () => {
      const formRef = (this.$refs.form as any);
      formRef.validate((valid: boolean) => {
        if (valid) {
          // 校验通过,执行提交逻辑
          console.log('提交表单');
        } else {
          // 校验不通过,提示错误信息
          console.log('表单校验失败');
        }
      });
    };

    return {
      form,
      rules,
      submitForm,
    };
  },
});
</script>

在上述代码中,我们使用了Element-plus提供的 ElForm、ElFormItem 、ElInput 和ElButton 组件来构建表单。在setup 函数中,我们定义了form rules变量,并通过ref 函数进行了响应式处理。rules 对象定义了每个字段的校验规则。在submitForm 方法中,我们通过this.$refs.form 获取到表单的引用,并调用validate 方法进行表单校验。校验结果会通过回调函数的参数返回,如果校验通过,我们可以执行提交逻辑,否则提示校验失败。

可以通过自定义校验器来实现自定义校验。以下是一个示例,展示如何实现自定义校验。 在

rules

对象中,我们可以为每个字段定义一个校验规则数组。每个校验规则对象中包含了required 、validator、message 、trigger 等属性,其中validator 属性可以指定一个自定义的校验函数。

例如,在上述示例中,我们可以在rules 对象中为username 字段添加一个自定义校验函数:

const rules = {
  username: [
    { required: true, message: '请输入用户名', trigger: 'blur' },
    { min: 3, max: 10, message: '用户名长度在 3 到 10 个字符', trigger: 'blur' },
    { validator: validateUsername, message: '用户名已存在', trigger: 'blur' },
  ],
  password: [
    { required: true, message: '请输入密码', trigger: 'blur' },
    { min: 6, max: 20, message: '密码长度在 6 到 20 个字符', trigger: 'blur' },
  ],
};

const validateUsername = (rule: any, value: string, callback: any) => {
  // 这里可以编写自定义的校验逻辑
  if (value === 'admin') {
    callback(new Error('用户名已存在'));
  } else {
    callback();
  }
};

在上述代码中,我们为username 字段添加了一个自定义校验函数validateUsername ,该函数接收三个参数。

rule