form-create 是一个能够经过 JSON 生成具备动态渲染、数据收集、验证和提交功能的表单生成器。而且支持生成任何 Vue 组件。结合内置17种经常使用表单组件和自定义组件,再复杂的表单均可以轻松搞定。html
自定义组件github
经过 JSON 建立表单npm
经过 API 操做表单element-ui
名称 | 说明 |
---|---|
@form-create/iview | iview 版表单生成器 |
@form-create/element-ui | element-ui 版表单生成器 |
@form-create/core | form-create 核心包 |
@form-create/utils | form-create 工具包 |
@form-create/data | 省市区多级联动数据 |
以element-ui版本为例介绍如何在项目中使用 form-createapp
npm i @form-create/element-ui
全局注册iview
import formCreate form '@form-create/element-ui'; Vue.use(formCreate);
局部挂载工具
import formCreate form '@form-create/element-ui'; export default { components:{ formCreate:formCreaet.$form() } }
<template> <form-create v-model="fApi" :rule="rule" @on-submit="onSubmit"></form-create> </template>
export default { data () { return { //表单实例对象 $f fApi:{}, //表单生成规则 rule:[ { type:'input', field:'goods_name', title:'商品名称' }, { type:'datePicker', field:'created_at', title:'建立时间' } ] }; }, methods:{ onSubmit(formData){ //TODO 提交表单 } } };
能够经过 $f 快速操做表单,例如:布局
$f.hidden
:隐藏指定组件$f.validate
:验证表单$f.setValue
:修改表单组件的值$f.append
:追加表单组件经过标签生成ui
{ type:'el-button', name: 'btn', props:{ type:'primary', field:'btn', loading:true }, children:['加载中'] }
经过模板生成
{ type:'template', name:'btn' template:'<el-button :loading="loading">{{text}}<el-button>', vm: new Vue({ data:{ loading:true, text:'加载中' } }) }
自定义组件转换为表单组件后,可经过$f.formData
,$f.getValue
,$f.setValue
,$f.disabled
等方法快速操做组件,达到和内置组件相同的效果
props
在自定义组件内部经过props
接收一下属性
value
表单的值disabled
组件的禁用状态例如:
vm = Vue({ props:{ value:String, disabled:Boolean } })
input 事件
经过input
事件更新组件内部的值
当组件值发生变化后,经过 input 事件更新值.例如:
vm.$emit('input',newValue);
要生成的自定义组件必须经过Vue.component
方法挂载到全局,或者经过formCreate.component
方法挂载
例如:
formCreate.component('TestComponent',component);
或者
Vue.component('TestComponent',component);
表单组件必须定义field
属性
JSON
{ type:'TestComponent', value:'test', field:'testField', title:'自定义组件' }
Maker
formCreate.maker.create('TestComponent','testField','自定义组件').value('test')
自定义计数器按钮组件,获取按钮点击数.该组件的功能和内置组件相同
formCreate.maker.template('<el-button @click="onClick" long :disabled="disabled">计数器-{{num}}</el-button>', new Vue({ props:{ //预约义 disabled:Boolean, value:Number, }, data: function () { return { num: this.value, } }, watch:{ value(n){ this.num = n; } }, methods: { onClick: function () { this.num++; //更新组件内部的值 this.$emit('input',this.num); }, }, }), 'tmp', '自定义 title').value(100).props('disabled',false)