天天看点

ant-design-vue 登录表单校验

最近刚刚上手了 Vue3 的

antdv

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('/');
}
           

测试

在线浏览页面

ant-design-vue 登录表单校验

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

ant-design-vue 登录表单校验