el-form 是 Element Plus 框架中的一个表单组件,用于构建表单界面。它支持多种输入控件,如输入框、选择器等,并提供了验证功能。
一。 el-form 属性详解
-
model:
- 类型:
Object - 用途: 表单数据对象。
- 类型:
-
rules:
- 类型:
Object - 用途: 表单验证规则。
- 类型:
-
label-position:
- 类型:
String - 用途: 表单域标签的位置,可选值为
left、right、top。 - 默认值:
right
- 类型:
-
label-width:
- 类型:
String - 用途: 表单域标签的宽度
- 类型:
-
inline:
- 类型:
Boolean - 用途: 是否为内联表单。
- 默认值:
false
- 类型:
-
show-message:
- 类型:
Boolean - 用途: 是否显示校验错误信息。
- 默认值:
true
- 类型:
-
inline-message:
- 类型:
Boolean - 用途: 是否以行内形式显示消息。
- 默认值:
false
- 类型:
-
status-icon:
- 类型:
Boolean - 用途: 是否在输入框中显示校验结果图标。
- 默认值:
false
- 类型:
-
validate-on-rule-change:
- 类型:
Boolean - 用途: 规则改变时是否重新进行校验。
- 默认值:
true
- 类型:
-
hide-required-asterisk:
- 类型:
Boolean - 用途: 是否显示必填字段的标签旁边的红色星号。
- 默认值:
false
- 类型:
-
size:
- 类型:
String - 用途: 控件大小,可选值为
medium、small、mini。
- 类型:
二。 el-form 事件详解
-
validate:
- 类型:
Function - 用途: 对整个表单进行校验的方法。
- 参数:
callback(errorFields, invalidFields)
- 类型:
-
validateField:
- 类型:
Function - 用途: 对部分表单字段进行校验的方法。
- 参数:
prop,callback(errorFields)
- 类型:
-
resetFields:
- 类型:
Function - 用途: 对整个表单进行重置。
- 类型:
-
clearValidate:
- 类型:
Function - 用途: 移除表单项的校验结果。
- 参数:
props
- 类型:
三。 el-form 插槽详解
-
default:
- 插槽名称:
default - 用途: 表单的内容。
- 插槽名称:
四。示例代码
<template>
<div>
<h2>Form 示例</h2>
<!-- 基本用法 -->
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="活动名称" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="活动区域" prop="region">
<el-select v-model="ruleForm.region" placeholder="请选择活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="活动时间" required>
<el-col :span="11">
<el-form-item prop="date1">
<el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker>
</el-form-item>
</el-col>
<el-col class="line" :span="2">-</el-col>
<el-col :span="11">
<el-form-item prop="date2">
<el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker>
</el-form-item>
</el-col>
</el-form-item>
<el-form-item label="即时配送" prop="delivery">
<el-switch v-model="ruleForm.delivery"></el-switch>
</el-form-item>
<el-form-item label="活动性质" prop="type">
<el-checkbox-group v-model="ruleForm.type">
<el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
<el-checkbox label="地推活动" name="type"></el-checkbox>
<el-checkbox label="线下主题活动" name="type"></el-checkbox>
<el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="特殊资源" prop="resource">
<el-radio-group v-model="ruleForm.resource">
<el-radio label="线上品牌商赞助"></el-radio>
<el-radio label="线下场地免费"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="活动形式" prop="desc">
<el-input type="textarea" v-model="ruleForm.desc"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { ElMessage } from 'element-plus'
const ruleForm = ref({
name: '',
region: '',
date1: '',
date2: '',
delivery: false,
type: [],
resource: '',
desc: ''
})
const rules = ref({
name: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
],
region: [
{ required: true, message: '请选择活动区域', trigger: 'change' }
],
date1: [
{ type: 'date', required: true, message: '请选择日期', trigger: 'change' }
],
date2: [
{ type: 'date', required: true, message: '请选择时间', trigger: 'change' }
],
type: [
{ type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
],
resource: [
{ required: true, message: '请选择活动资源', trigger: 'change' }
],
desc: [
{ required: true, message: '请填写活动形式', trigger: 'blur' }
]
})
const submitForm = (formName) => {
const form = ref(null)
form.value.validate((valid) => {
if (valid) {
ElMessage.success('提交成功!')
} else {
ElMessage.error('表单校验失败,请检查输入!')
return false
}
})
}
const resetForm = (formName) => {
const form = ref(null)
form.value.resetFields()
}
</script>
五。 代码解释
-
基本用法:
- 使用
el-form组件并设置基本属性。 -
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> <el-form-item label="活动名称" prop="name"> <el-input v-model="ruleForm.name"></el-input> </el-form-item> <el-form-item label="活动区域" prop="region"> <el-select v-model="ruleForm.region" placeholder="请选择活动区域"> <el-option label="区域一" value="shanghai"></el-option> <el-option label="区域二" value="beijing"></el-option> </el-select> </el-form-item> <el-form-item label="活动时间" required> <el-col :span="11"> <el-form-item prop="date1"> <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker> </el-form-item> </el-col> <el-col class="line" :span="2">-</el-col> <el-col :span="11"> <el-form-item prop="date2"> <el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker> </el-form-item> </el-col> </el-form-item> <el-form-item label="即时配送" prop="delivery"> <el-switch v-model="ruleForm.delivery"></el-switch> </el-form-item> <el-form-item label="活动性质" prop="type"> <el-checkbox-group v-model="ruleForm.type"> <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox> <el-checkbox label="地推活动" name="type"></el-checkbox> <el-checkbox label="线下主题活动" name="type"></el-checkbox> <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox> </el-checkbox-group> </el-form-item> <el-form-item label="特殊资源" prop="resource"> <el-radio-group v-model="ruleForm.resource"> <el-radio label="线上品牌商赞助"></el-radio> <el-radio label="线下场地免费"></el-radio> </el-radio-group> </el-form-item> <el-form-item label="活动形式" prop="desc"> <el-input type="textarea" v-model="ruleForm.desc"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button> <el-button @click="resetForm('ruleForm')">重置</el-button> </el-form-item> </el-form>
- 使用
-
表单数据模型:
- 定义表单数据对象
ruleForm和验证规则rules。 -
const ruleForm = ref({ name: '', region: '', date1: '', date2: '', delivery: false, type: [], resource: '', desc: '' }) const rules = ref({ name: [ { required: true, message: '请输入活动名称', trigger: 'blur' }, { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' } ], region: [ { required: true, message: '请选择活动区域', trigger: 'change' } ], date1: [ { type: 'date', required: true, message: '请选择日期', trigger: 'change' } ], date2: [ { type: 'date', required: true, message: '请选择时间', trigger: 'change' } ], type: [ { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' } ], resource: [ { required: true, message: '请选择活动资源', trigger: 'change' } ], desc: [ { required: true, message: '请填写活动形式', trigger: 'blur' } ] })
- 定义表单数据对象
-
表单提交和重置:
- 定义表单提交和重置的方法。
-
const submitForm = (formName) => { const form = ref(null) form.value.validate((valid) => { if (valid) { ElMessage.success('提交成功!') } else { ElMessage.error('表单校验失败,请检查输入!') return false } }) } const resetForm = (formName) => { const form = ref(null) form.value.resetFields() }