目录
- 前言
- [1. 基本知识](#1. 基本知识)
- [2. Demo](#2. Demo)
- [3. 实战](#3. 实战)
前言
Java基本知识:
奔着从实战中出发剖析基本知识
1. 基本知识
a-form-item 是 Ant Design Vue 表单组件 中用于:
-
给控件加 label(标签)
-
设置 label 和表单控件的布局(labelCol、wrapperCol)
-
处理验证状态(success/error/warning 等)
-
配合 v-decorator 来实现 表单数据管理 + 校验
常用属性(最重要)
| 属性 | 说明 |
|---|---|
label |
表单项左侧标题 |
labelCol |
label 的布局(栅格宽度) |
wrapperCol |
控件区域布局 |
help |
自定义帮助信息 |
validateStatus |
验证状态:success / warning / error / validating |
required |
是否标记为必填(只显示红 *,不代表校验规则) |
extra |
额外说明文字 |
简易的例子
html
<a-form-item
label="用户名"
:labelCol="{ span: 5 }"
:wrapperCol="{ span: 16 }"
validateStatus="error"
help="用户名不能为空"
>
2. Demo
常用的Demo写法如下
输入用户名、手机号
校验必填 + 正则
提交收集数据
自动显示错误提示
html
<template>
<a-form :form="form" @submit.prevent="handleSubmit">
<!-- 用户名 -->
<a-form-item
label="用户名"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
>
<a-input
placeholder="请输入用户名"
v-decorator="[
'username',
{
rules: [
{ required: true, message: '用户名不能为空' },
{ min: 3, message: '至少 3 个字符' }
]
}
]"
/>
</a-form-item>
<!-- 手机号 -->
<a-form-item
label="手机号"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
>
<a-input
placeholder="请输入手机号"
v-decorator="[
'mobile',
{
rules: [
{ required: true, message: '请输入手机号' },
{ pattern: /^1\d{10}$/, message: '手机号格式不正确' }
]
}
]"
/>
</a-form-item>
<!-- 提交按钮 -->
<a-form-item :wrapperCol="{ span: 16, offset: 5 }">
<a-button type="primary" html-type="submit" :loading="loading">
提交
</a-button>
</a-form-item>
</a-form>
</template>
<script>
export default {
name: "UserFormDemo",
beforeCreate() {
this.form = this.$form.createForm(this); // 必须创建 form
},
data() {
return {
loading: false,
// label 和控件 的布局
labelCol: { span: 5 },
wrapperCol: { span: 16 },
};
},
methods: {
handleSubmit() {
this.form.validateFields((err, values) => {
if (!err) {
console.log("提交的数据:", values);
this.$message.success("提交成功!");
}
});
}
}
};
</script>
<style scoped>
</style>
🧩 结构分析(核心写法)
1️⃣ 绑定 form
javascript
beforeCreate() {
this.form = this.$form.createForm(this);
}
👉 这是 AntD Vue2 的黑科技,必须写。
2️⃣ 使用表单布局(labelCol & wrapperCol)
javascript
labelCol: { span: 5 },
wrapperCol: { span: 16 },
让 label 占 5 列,控件占 16 列。
3️⃣ v-decorator 管理字段 + 校验规则
标准语法:v-decorator="['字段名', 配置规则]"
示例:
javascript
v-decorator="[
'username',
{
rules: [
{ required: true, message: '不能为空' }
]
}
]"
4️⃣ 提交表单统一校验
javascript
this.form.validateFields((err, values) => {
if (!err) {
console.log(values)
}
})
⚡ 不需要手写错误提示,a-form-item 会自动显示
3. 实战
项目中实战的代码模块经典结构如下:
html
<a-form-item
label="用户姓名"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
>
<a-input
placeholder="请输入用户姓名"
v-decorator.trim="['username', validatorRules.username]"
/>
</a-form-item>
Demo 使用的是:
html
labelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 }
}
-
在小屏:label 和控件都占 24 列(换行)
-
在大屏:label 占 5,内容占 16(共 24 栅格)
👉 这是 AntD 的 响应式栅格布局方式
validatorRules.username(校验规则示例)
代码里面是:
html
username: {
rules: [
{ required: true, message: '请输入用户名称!' }
]
}
常见校验如下:
| 规则 | 示例 |
|---|---|
| required | { required: true } |
| min/max 长度 | { min: 3, max: 20 } |
| 正则 pattern | { pattern: /^[A-Za-z]+$/ } |
| 自定义校验 | { validator: this.myValidator } |