Skip to content

Form 表单

表单包含 输入框, 单选框, 下拉选择, 多选框 等用户输入的组件。 使用表单,您可以收集、验证和提交数据。

典型表单

最基础的表单包括各种输入表单项,比如input、select、radio、checkbox等。

在每一个 form 组件中,你需要一个 form-item 字段作为输入项的容器,用于获取值与验证值。

form value:

{
  "email": "123",
  "password": "",
  "confirmPwd": ""
}

<script setup>
import { reactive, ref } from 'vue'
// This starter template is using Vue 3 <script setup> SFCs
// Check out https://vuejs.org/api/sfc-script-setup.html#script-setup
import Form from '@/components/Form/Form.vue'
import FormItem from '@/components/Form/FormItem.vue'
import Input from '@/components/Input/Input.vue'
import Button from '@/components/Button/Button.vue'
const formRef = ref()
const model = reactive({
  email: '123',
  password: '',
  confirmPwd: ''
})
const rules = {
  email: [{ type: 'email', required: true, trigger: 'blur' } ],
  password: [{ type: 'string', required: true, trigger: 'blur', min: 3, max: 5 }],
  confirmPwd: [{ type: 'string', required: true, trigger: 'blur' }, {
    validator: (rule, value) => value === model.password, trigger: 'blur', message: '两个密码必须相同'
  } ],
}

const submit = async () => {
  try {
    await formRef.value.validate()
    console.log('passed!')
  } catch (e) {
    console.log('the error', e)
  }
}
const reset = () => {
  formRef.value.resetFields()
}
</script>

<template>
<div>
  <Form :model="model" :rules="rules" ref="formRef">
    <FormItem label="the email" prop="email">
      <Input v-model="model.email"/>
    </FormItem>
    <FormItem label="the password" prop="password">
      <Input type="password" v-model="model.password" />
    </FormItem>
    <FormItem prop="confirmPwd" label="confirm password">
      <Input v-model="model.confirmPwd" type="password" />
    </FormItem>
    <div :style="{textAlign: 'center'}">
      <Button type="primary" @click.prevent="submit">Submit</Button>
      <Button @click.prevent="reset">Reset</Button>
    </div>
  </Form>
  <p>
    form value:
    <pre>{{model}}</pre>
  </p>

</div>
</template>

<style>

</style>

Form Attributes

参数说明类型可选值默认值
model表单数据对象object
rules表单验证规则object
label-width表单域标签的宽度string
label-position表单域标签的位置,如果值为 left 或者 right 时,则需要设置 label-widthstringleft/right/toptop
hide-required-asterisk是否显示必填字段的标签旁边的红色星booleanfalse
show-message是否显示校验错误信息booleantrue
inline行内表单模式booleanfalse
disabled是否禁用该表单内的所有组件。若设置为 true,则表单内组件上的 disabled 属性不再生效booleanfalse
validate-on-rule-change是否在 rules 属性改变后立即触发一次验证booleantrue

Form Methods

方法名说明参数
validate对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promiseFunction(callback: Function(boolean, object))
validateField对部分表单字段进行校验的方法Function(props: array | string, callback: Function(errorMessage: string))
resetFields对整个表单进行重置,将所有字段值重置为初始值并移除校验结果-
clearValidate移除表单项的校验结果。传入待移除的表单项的 prop 属性或者 prop 组成的数组,如不传则移除整个表单的校验结果Function(props: array | string)

Form Events

事件名称说明回调参数
validate任一表单项被校验后触发被校验的表单项 prop 值,校验是否通过,错误消息(如果存在)

Form-Item Attributes

参数说明类型可选值默认值
prop表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的string
label标签文本string
label-width表单域标签的的宽度,例如 '50px'。作为 Form 直接子元素的 form-item 会继承该值。支持 auto。string
required是否必填,如不设置,则会根据校验规则自动生成boolean
rules表单验证规则object
error表单域验证错误信息, 设置该值会使表单验证状态变为error,并显示该错误信息string
show-message是否显示校验错误信息booleantrue
inline-message以行内形式展示校验信息booleanfalse
size用于控制该表单内组件的尺寸stringmedium / small / mini-

Form-Item Slot

name说明
-Form Item 的内容

Form-Item Scoped Slot

name说明
error自定义表单校验信息的显示方式,参数为

Form-Item Methods

方法名说明参数
resetField对该表单项进行重置,将其值重置为初始值并移除校验结果-
clearValidate移除该表单项的校验结果-

Form-Item Rules

参数说明类型可选值默认值
required是否必填,如不设置,则会根据校验规则自动生成boolean
pattern是否必填,如不设置,则会根据校验规则自动生成boolean
min是否必填,如不设置,则会根据校验规则自动生成boolean
max是否必填,如不设置,则会根据校验规则自动生成boolean
len是否必填,如不设置,则会根据校验规则自动生成boolean
range是否必填,如不设置,则会根据校验规则自动生成boolean
enum是否必填,如不设置,则会根据校验规则自动生成boolean
message提示消息string
trigger触发方式string
type校验类型string
validator自定义校验function

Released under the MIT License.