vue + element-plus自定义表单验证(修改密码业务)

写一个vue组件Password.vue

没有表单验证只有3个表单项

复制代码
<template>
  <div>
    <el-form>
      <el-form-item label="旧密码">
        <el-input></el-input>
      </el-form-item>
      <el-form-item label="新密码">
        <el-input></el-input>
      </el-form-item>
      <el-form-item label="验证密码">
        <el-input></el-input>
      </el-form-item>
    </el-form>
  </div>
</template>
<script setup>

</script>

路由省略

给这个表单绑定一个对象

html 复制代码
<template>
  <div>
    <el-form :="data.form">
      <el-form-item label="旧密码" v-model="data.form.oldPassword">
        <el-input ></el-input>
      </el-form-item>
      <el-form-item label="新密码" v-model="data.form.password">
        <el-input></el-input>
      </el-form-item>
      <el-form-item label="验证密码" v-model="data.form.confirmPassword">
        <el-input></el-input>
      </el-form-item>
    </el-form>
  </div>
</template>
<script setup>
import {reactive}  from "vue";
const data = reactive({
  form: {
    oldPassword: '',
    password: '',
    confirmPassword: ''
  }
})
</script>

给表单绑定规则注意表单项一定要有prop属性 属性值对应 data.rules里的属性

html 复制代码
<template>
  <div>
    <el-form :model="data.form" :rules="data.rules">
      <el-form-item label="旧密码" prop="oldPassword" >
        <el-input v-model="data.form.oldPassword"></el-input>
      </el-form-item>
      <el-form-item label="新密码"   prop="password">
        <el-input v-model="data.form.password"></el-input>
      </el-form-item>
      <el-form-item label="验证密码" >
        <el-input v-model="data.form.confirmPassword"></el-input>
      </el-form-item>
    </el-form>
  </div>
</template>
<script setup>
import {reactive}  from "vue";
const data = reactive({
  form: {
    oldPassword: '',
    password: '',
    confirmPassword: ''
  }
  ,
  rules: {
    oldPassword: [
      { required: true, message: '请输入旧密码', trigger: 'blur' },
      { min: 6, max: 32, message: '长度在 6 到 32 个字符', trigger: 'blur' }
    ],
    password: [
      { required: true, message: '请输入新密码', trigger: 'blur' },
      { min: 6, max: 32, message: '长度在 6 到 32个字符', trigger: 'blur' }
    ]
  }
})
</script>

添加自定义规则注意规则有优先级的

html 复制代码
<template>
  <div>
    <el-form :model="data.form" :rules="data.rules">
      <el-form-item label="旧密码" prop="oldPassword" >
        <el-input v-model="data.form.oldPassword"></el-input>
      </el-form-item>
      <el-form-item label="新密码"   prop="password">
        <el-input v-model="data.form.password"></el-input>
      </el-form-item>
      <el-form-item label="验证密码"   prop="confirmPassword">
        <el-input v-model="data.form.confirmPassword"></el-input>
      </el-form-item>
    </el-form>
  </div>
</template>
<script setup>
import {reactive}  from "vue";
const validatePass1 = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请输入新密码'));
  } else if (value !== '123') {
    callback(new Error('旧密码错误'));
  }else{
    callback();
  }
}
const validatePass2 = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请再次输入新密码'));
  } else if (value !== data.form.password) {
    callback(new Error('两次输入密码不一致!'));
  } else {
    callback();
  }
}
const data = reactive({
  form: {
    oldPassword: '',
    password: '',
    confirmPassword: ''
  }
  ,
  rules: {
    oldPassword: [
        { required: true, message: '请输入旧密码', trigger: 'blur' },
      {validator: validatePass1, trigger: 'blur'}
    ],
    password: [
      { required: true, message: '请输入新密码', trigger: 'blur' },
      { min: 6, max: 32, message: '长度在 6 到 32个字符', trigger: 'blur' }
    ],
    confirmPassword: [
      { required: true, message: '请再次输入新密码', trigger: 'blur' },

      { validator: validatePass2, trigger: 'blur' }
    ]
  }
})
</script>
相关推荐
用户66885998476626 分钟前
Vue 3.0安装与使用
vue.js
空中海1 小时前
01 React Native 基础、核心组件与布局体系
javascript·react native·react.js
前端之虎陈随易3 小时前
2年没用Nodejs了,Bun很香
linux·前端·javascript·vue.js·typescript
好运的阿财4 小时前
OpenClaw工具拆解之host_workspace_write+host_workspace_edit
前端·javascript·人工智能·机器学习·ai编程·openclaw·openclaw工具
XiYang-DING5 小时前
JavaScript
开发语言·javascript·ecmascript
空中海6 小时前
02 React Native状态、导航、数据流与设备能力
javascript·react native·react.js
空中海6 小时前
02 状态、Hooks、副作用与数据流
开发语言·javascript·ecmascript
abcnull7 小时前
传统的JavaWeb项目Demo快速学习!
java·servlet·elementui·vue·javaweb
空中海7 小时前
04 React Native工程化、质量、发布与生态选型
javascript·react native·react.js