本篇文章通过实例给大家分享了vue自动化表单的操作方法以及相关的代码做了描述,有兴趣的朋友可以跟着学习下。
背景
B端系统表单较多,且表单可能含有较多字段
字段较多的表单带来了大片HTML代码
在大片HTML中,混杂着参数绑定、事件处理等逻辑,不利于维护
技术栈 Vue,Element(默认表单布局)适合中后台项目快速开发
目标
通过json配置快速生成表单的vue plugin。
设计目标
减少html 重复片段
表单字段组件可扩展
事件、联动通过eventbus 解耦
校验可扩展
表单布局可自定义
可视化配置
大概方案设计

使用
安装
1 | npm install charlie-autoform charlie-autoform_component_lib
|
Salin selepas log masuk
源码:https://charlielau.github.io/autoform/#/component/autoform
引入插件
1 2 3 4 5 | import AutoForm from 'charlie-autoform';
import AutoForm_component_lib from 'charlie-autoform_component_lib';
Vue. use (AutoForm);
Vue. use (AutoForm_component_lib);
|
Salin selepas log masuk
基本使用
demo.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <template>
<p>
<auto-form ref= "tagForm1" :model= "model1" :fields= "fields1" :layout= "layout" >
<el-form-item class = "clearfix" >
<el-button type= "primary" >立即创建</el-button>
<el-button>取消</el-button>
</el-form-item>
</auto-form>
</p>
</template>
<script>
export default {
data() {
return {
model2: {
name: '',
type: []
},
layout2: {
align: 'left',
labelWidth: '100px',
custom: false,
inline: true
},
fields2: [
{
key: 'name',
type: 'input',
templateOptions: {
label: '审批人'
}
},
{
key: 'region',
type: 'select',
templateOptions: {
label: '活动区域',
placeholder: '请选择活动区域',
options: [
{
label: '区域一',
value: 'shanghai'
},
{
label: '区域二',
value: 'beijing'
}
],
validators:[
]
}
}
]
};
}
};
</script>
|
Salin selepas log masuk
最终效果

添加自定义组件或者组件目录
1 2 | Vue. $autoform .RegisterDir(()=> require .context('./components/autoform', 'c'));
Vue. $autoform .Register(Vue,[Components...],{prefix: "c" })
|
Salin selepas log masuk
cHello.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <template>
<p>
<p>
<p>基本的变量可以通过 "mixins" 获取,这里有开发组件需要的一些变量</p>
<p>自定义子组件:Hello</p>
<p>当前field: {{field}}</p>
<p>整个model: {{model}}</p>
<p>当前model: {{model[field.name]}}</p>
<p>layout: {{layout}}</p>
<p>字段相关配置to: {{to}}</p>
</p>
</p>
</template>
<script>
import {baseField} from "charlie-autoform" ;
export default {
mixins: [baseField],
name: 'cHello',
data () {
return {};
},
methods: {},
mounted(){
}
};
</script>
|
Salin selepas log masuk
成果
目前应用再多个系统
定性: 维护成本降低、关注点分离
定量:表单开发效率提升50%
相关推荐:
Vue表单类的父子组件数据传递示例
Atas ialah kandungan terperinci vue自动化表单实例分析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!