ant-design-vue 登录表单校验

最近刚刚上手了 Vue3antdv ui框架,来做个简单的登录校验练练手🤔

安装 antdv 依赖

npm install ant-design-vue --save

main.ts/js 中注册

// main.ts
import { createApp } from 'vue'
import App from './App.vue'
import 'ant-design-vue/dist/antd.css'
import Antd from 'ant-design-vue'

createApp(App).use(Antd).mount('#app')

编写登录页面

登录界面的具体代码在这里,博客中只展示重要的逻辑和样式。

// LoginPage.vue
<template>
  <a-form>
    <a-form-item>
      <a-input placeholder="请输入用户名"></a-input>
    </a-form-item>
    <a-form-item>
      <a-input-password placeholder="请输入密码"></a-input-password>
    </a-form-item>
    <a-form-item>
      <a-button>登录</a-button>
    </a-form-item>
  </a-form>
</template>

基本的样式只有上面的几行代码,后续的逻辑都是关于表单验证的。下面来写一下 js 代码:

<script lang="ts" setup>
import {FormInstance} from "ant-design-vue";
import {reactive, ref} from "vue";
import {Rule} from "ant-design-vue/es/form";


const formRef = ref<FormInstance>(); // 通过为 form 加上 ref 属性可以获取表单实例

// 定义表单域
const formState = reactive({
  userName: '',
  passWord: ''
});

// 用户名校验规则
const userNameCheck = async (_rule: Rule, value: string) => {
  if (!value) {
    return Promise.reject('用户名不能为空')
  } else if (value.length <= 2) {
    return Promise.reject('用户名长度不能小于两个字符')
  } else {
    return Promise.resolve()
  }
}

// 密码校验规则
const passWordCheck = async (_rule: Rule, value: string) => {
  if (!value) {
    return Promise.reject('密码不能为空')
  } else if (value.length < 5) {
    return Promise.reject('密码长度不能小于5个字符')
  } else {
    return Promise.resolve()
  }
}

</script>

写好基本的校验规则后,就可以将相关的内容加到 <template> 中了:

<a-form :model="formState" ref="formRef" @finish="jump">
  <!-- @finish="jump" 下面的js代码会提到 -->
  <a-form-item :rules="[{validator: userNameCheck, trigger: 'blur'}]" name="userName">
    <!-- form-item 必须加上 name 属性,且需要和 formState 中的属性同名 -->
    <a-input
        placeholder="请输入用户名"
        v-model:value="formState.userName"
    ></a-input>
  </a-form-item>
  <a-form-item name="passWord" :rules="[{validator: passWordCheck, trigger: 'blur'}]">
    <!-- trigger=blur 会在输入框失焦时触发表单校验,=change会在点击登录时触发校验 -->
    <a-input-password placeholder="请输入密码" v-model:value="formState.passWord"></a-input-password>
  </a-form-item>
  <a-form-item>
    <a-button type="primary" html-type="submit">登录</a-button>
    <!-- 只有填写了 html-type="submit" 才可以使按钮具有表单校验的功能,才可以使 @finsih属性生效 -->
  </a-form-item>
</a-form>

可以看到上面的 <a-form> 有一个 @finish 的属性,其值为一个名为 「jump」的函数,作用是 在点击按钮后,如果校验成功则进行路由跳转

function jump() {
  router.push('/');
}

测试

在线浏览页面

在未满足校验条件点击提交 或者输入框失去焦点后,会触发校验失败的提示:

如果填写的内容满足要求,则会在点击按钮后执行 路由跳转

posted @ 2022-09-27 13:56  HuStoking  阅读(556)  评论(1编辑  收藏  举报