这里主要介绍Element组件中的Form表单,它是由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。

典型表单:在 Form 组件中,每一个表单域由一个 Form-Item 组件构成,表单域中可以放置各种类型的表单控件,包括 Input、Select、Checkbox、Radio、Switch、DatePicker、TimePicker。

行内表单:设置 inline 属性可以让表单域变为行内的表单域。

表单验证:Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。

表单属性:

参数

说明

类型

可选值

默认值

model

表单数据对象

object



rules

表单验证规则

object



inline

行内表单模式

boolean


false

label-position

表单域标签的位置,如果值为 left 或者 right 时,则需要设置 label-width

string

right/left/top

right

label-width

表单域标签的宽度,作为 Form 直接子元素的 form-item 会继承该值

string



label-suffix

表单域标签的后缀

string



hide-required-asterisk

是否显示必填字段的标签旁边的红色星号

boolean


false

show-message

是否显示校验错误信息

boolean


true

inline-message

是否以行内形式展示校验信息

boolean


false

status-icon

是否在输入框中显示校验结果反馈图标

boolean


false

validate-on-rule-change

是否在 rules 属性改变后立即触发一次验证

boolean


true

size

用于控制该表单内组件的尺寸

string

medium / small / mini


disabled

是否禁用该表单内的所有组件。若设置为 true,则表单内组件上的 disabled 属性不再生效

boolean


false

表单项属性:

参数

说明

类型

可选值

默认值

prop

表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的

string

传入 Form 组件的 model 中的字段


label

标签文本

string



label-width

表单域标签的的宽度,例如 '50px'

string



required

是否必填,如不设置,则会根据校验规则自动生成

boolean


false

rules

表单验证规则

object



error

表单域验证错误信息, 设置该值会使表单验证状态变为error,并显示该错误信息

string



show-message

是否显示校验错误信息

boolean


true

inline-message

以行内形式展示校验信息

boolean


false

size

用于控制该表单域下组件的尺寸

string

medium / small / mini

-

 表单方法:

方法名

说明

参数

validate

对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promise

Function(callback: Function(boolean, object))

validateField

对部分表单字段进行校验的方法

Function(props: array

resetFields

对整个表单进行重置,将所有字段值重置为初始值并移除校验结果


clearValidate

移除表单项的校验结果。传入待移除的表单项的 prop 属性或者 prop 组成的数组,如不传则移除整个表单的校验结果

Function(props: array

如下所示,是用Element组件之Form表单写的一个登录页面:

<template>
  <el-form :model="loginForm" :rules="loginRules" ref="loginForm" label-position="left" label-width="0px"
           class="demo-ruleForm login-container">
    <h3 class="title">登陆界面</h3>
    <el-form-item prop="account">
      <el-input type="text" v-model="loginForm.account" auto-complete="off" placeholder="请输入账号"></el-input>
    </el-form-item>
    <el-form-item prop="checkPass">
      <el-input type="password" v-model="loginForm.checkPass" auto-complete="off" placeholder="请输入密码"></el-input>
    </el-form-item>
    <el-checkbox v-model="checked" checked class="remember">记住密码</el-checkbox>
    <el-form-item style="width:100%;">
      <el-button type="primary" class="loginBtn"
                 @click.native.prevent="handleSubmit" :loading="logining">登录
      </el-button>
    </el-form-item>
  </el-form>
</template>

注意:W3C 标准中有如下规定:

When there is only one single-line text input field in a form, the user agent should accept Enter in that field as a request to submit the form.

即:当一个 form 元素中只有一个输入框时,在该输入框中按下回车应提交该表单。如果希望阻止这一默认行为,可以在 <el-form> 标签上添加 @submit.native.prevent