在 Vue 中使用 element-ui 组件库开发表单时,往往需要写大量重复的代码。为了解决这个问题,我们可以使用 vue-ele-form-json 这个 npm 包。
安装
使用 npm
安装:
npm install vue-ele-form-json --save
或使用 yarn
安装:
yarn add vue-ele-form-json
使用方式
引入依赖
在 Vue 的 main.js
中引入 Element UI 和 vue-ele-form-json:
import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import EleForm from 'vue-ele-form-json' Vue.use(ElementUI) Vue.use(EleForm)
编写表单
在 Vue 文件中,使用 <ele-form>
标签来编写表单。
这个标签需要设置两个属性::schema
和 :options
。
schema
是一个数组,每个元素都是一个对象,用来描述表单的各个字段。options
是一个对象,包含表单的各种选项。
例如,下面是一个基本的表单:
-- -------------------- ---- ------- ---------- --------- ---------- - ----- -------- ------ ------ ----- ---------- -- - ----- ----------- ------ ----- ----- ---------- -- - ----- --------- ------ --------- ----- ---------- - -- ----------- ----------- ------ -- -- -----------
在这个表单中,有三个字段:
username
:输入框,label 是“用户名”。password
:密码框,label 是“密码”。remember
:开关,label 是“是否记住密码”。
其中,:options="{ labelWidth: '80px' }"
表示表单中 label 的宽度是 80px。
数据绑定
在表单中使用 v-model
来进行数据绑定。例如,我们可以在 data
中定义一个 formData 字段,并将其与表单中的 v-model
绑定:
-- -------------------- ---- ------- ---------- --------- ---------- - ----- -------- ------ ------ ----- ----------- ------ -- --------- ----- -------- -------- -- -- - ----- ----------- ------ ----- ----- ----------- ------ -- --------- ----- -------- ------- -- -- - ----- --------- ------ --------- ----- ---------- - -- ----------- ----------- ------ -- ------------------ -- ----------- -------- ------ ------- - ---- -- - ------ - --------- - --------- --- --------- --- --------- ----- - - - - ---------
同时,可以在 data
中定义一些默认值和规则。
控件类型
vue-ele-form-json 中支持以下控件类型:
输入框
{ type: 'input', label: '用户名', prop: 'username', rules: [ { required: true, message: '请输入用户名' } ] }
密码框
{ type: 'password', label: '密码', prop: 'password', rules: [ { required: true, message: '请输入密码' } ] }
数字输入框
-- -------------------- ---- ------- - ----- --------- ------ ----- ----- -------- ------ - - --------- ----- -------- ------- -- - ----- --------- -------- ------- - - -
单选框
-- -------------------- ---- ------- - ----- -------- ------ ----- ----- ------ -------- - - ------ ---- ------ ------ -- - ------ ---- ------ -------- -- - ------ ----- ------ -------- - -- ------ - - --------- ----- -------- ------- - - -
多选框
-- -------------------- ---- ------- - ----- ----------- ------ ----- ----- ---------- -------- - - ------ ----- ------ ------------ -- - ------ ----- ------ ---------- -- - ------ ----- ------ ---------- - -- ------ - - --------- ----- -------- ------- - - -
下拉框
-- -------------------- ---- ------- - ----- --------- ------ ----- ----- ------- -------- - - ------ ----- ------ ---- -- - ------ ----- ------ ---- -- - ------ ----- ------ ---- - -- ------ - - --------- ----- -------- ------- - - -
日期选择器
{ type: 'date', label: '出生日期', prop: 'birthday', rules: [ { required: true, message: '请选择出生日期' } ] }
时间选择器
{ type: 'time', label: '上班时间', prop: 'workTime', rules: [ { required: true, message: '请选择上班时间' } ] }
日期时间选择器
{ type: 'datetime', label: '创建时间', prop: 'createTime', rules: [ { required: true, message: '请选择创建时间' } ] }
开关
{ type: 'switch', label: '是否开启', prop: 'switch', rules: [ { required: true, message: '请选择是否开启' } ] }
文本框
{ type: 'textarea', label: '备注', prop: 'remark', rules: [ { required: true, message: '请输入备注' } ] }
表单额外选项
表单除了需要描述字段的 schema,还可以设置一些额外的选项。这些选项通过 :options
属性传递。
以下是常用的额外选项:
labelWidth
控制 label 的宽度。可以是一个数字或一个字符串。如果是一个数字,就是像素值;如果是字符串,可以是带单位的字符串,如“80px”。
例如:
<ele-form :options="{ labelWidth: 80 }" /> <ele-form :options="{ labelWidth: '80px' }" />
span
控制整个表单的宽度。可以是 1 到 24 的一个数字。
例如:
<ele-form :options="{ span: 12 }" />
inline
控制表单是否是内联布局。默认为 false。
例如:
<ele-form :options="{ inline: true }" />
disabled
控制表单是否被禁用。默认为 false。
例如:
<ele-form :options="{ disabled: true }" />
readonly
控制表单是否为只读模式。默认为 false。
例如:
<ele-form :options="{ readonly: true }" />
表单校验
vue-ele-form-json 中支持 Element UI 表单自带的表单校验机制。
只需要在 schema 中设置 rules 属性即可。rules 是一个数组,每个元素是一个对象,描述了该字段的一些校验规则。
例如:
{ type: 'input', label: '用户名', prop: 'username', rules: [ { required: true, message: '请输入用户名' } ] }
在表单提交后,可以通过调用表单的 validate 方法来进行校验:
this.$refs.form.validate(valid => { if (valid) { // 校验通过的逻辑 } else { // 校验不通过的逻辑 } })
示例代码
下面是一个完整的 vue-ele-form-json 示例:
-- -------------------- ---- ------- ---------- --------- --------- ---------- ---------- - ----- -------- ------ ------ ----- ----------- ------ -- --------- ----- -------- -------- -- -- - ----- ----------- ------ ----- ----- ----------- ------ -- --------- ----- -------- ------- -- -- - ----- --------- ------ ----- ----- ------- -------- - - ------ ----- ------ ---- -- - ------ ----- ------ ---- -- - ------ ----- ------ ---- - -- ------ -- --------- ----- -------- ------- -- -- - ----- ----------- ------ ----- ----- ---------- -------- - - ------ ----- ------ ------------ -- - ------ ----- ------ ---------- -- - ------ ----- ------ ---------- - -- ------ -- --------- ----- -------- ------- -- -- - ----- ------- ------ ------- ----- ----------- ------ -- --------- ----- -------- --------- -- -- - ----- ----------- ------ ----- ----- --------- ------ -- --------- ----- -------- ------- -- - -- ----------- ----------- -------- ----- -- -- ------------------ -- ---- -------------- ---------- -------------- ---------------------------------- ---------- --------------------------------- ------ ---------- ----------- -------- ------ ------- - ---- -- - ------ - --------- --- ---------- -- - -- -------- - ---------- -- - ------------------------------ -- - -- ------- - -- --------- -------------------------- - ---- - -- ----- ------ ----- - -- -- --------- -- - ----------------------------- - - - ---------
总结
vue-ele-form-json 是一个可以简化表单开发的 npm 包,可以大大减少重复代码的编写。同时,它还支持 Element UI 表单校验机制,使得表单的校验变得更加简单。
在实际开发中,我们可以结合自己的业务需求选择适合自己的表单类型,从而提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067355890c4f7277583b3f