el-form详解

644 阅读4分钟

el-formElement Plus 框架中的一个表单组件,用于构建表单界面。它支持多种输入控件,如输入框、选择器等,并提供了验证功能。

一。 el-form 属性详解

  1. model:

    • 类型: Object
    • 用途: 表单数据对象。
  2. rules:

    • 类型: Object
    • 用途: 表单验证规则。
  3. label-position:

    • 类型: String
    • 用途: 表单域标签的位置,可选值为 leftrighttop
    • 默认值: right
  4. label-width:

    • 类型: String
    • 用途: 表单域标签的宽度
  5. inline:

    • 类型: Boolean
    • 用途: 是否为内联表单。
    • 默认值: false
  6. show-message:

    • 类型: Boolean
    • 用途: 是否显示校验错误信息。
    • 默认值: true
  7. inline-message:

    • 类型: Boolean
    • 用途: 是否以行内形式显示消息。
    • 默认值: false
  8. status-icon:

    • 类型: Boolean
    • 用途: 是否在输入框中显示校验结果图标。
    • 默认值: false
  9. validate-on-rule-change:

    • 类型: Boolean
    • 用途: 规则改变时是否重新进行校验。
    • 默认值: true
  10. hide-required-asterisk:

    • 类型: Boolean
    • 用途: 是否显示必填字段的标签旁边的红色星号。
    • 默认值: false
  11. size:

    • 类型: String
    • 用途: 控件大小,可选值为 mediumsmallmini

二。 el-form 事件详解

  1. validate:

    • 类型: Function
    • 用途: 对整个表单进行校验的方法。
    • 参数: callback(errorFields, invalidFields)
  2. validateField:

    • 类型: Function
    • 用途: 对部分表单字段进行校验的方法。
    • 参数: propcallback(errorFields)
  3. resetFields:

    • 类型: Function
    • 用途: 对整个表单进行重置。
  4. clearValidate:

    • 类型: Function
    • 用途: 移除表单项的校验结果。
    • 参数: props

三。 el-form 插槽详解

  1. 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>

五。 代码解释

  1. 基本用法:

    • 使用 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>
      
  2. 表单数据模型:

    • 定义表单数据对象 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' }
        ]
      })
      
  3. 表单提交和重置:

    • 定义表单提交和重置的方法。
    • 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()
      }