vue自动化表单实例分析


Posted in Javascript onMay 06, 2018

背景

B端系统表单较多,且表单可能含有较多字段
字段较多的表单带来了大片HTML代码
在大片HTML中,混杂着参数绑定、事件处理等逻辑,不利于维护
技术栈 Vue,Element(默认表单布局)适合中后台项目快速开发

目标

通过json配置快速生成表单的vue plugin。

设计目标

  1. 减少html 重复片段
  2. 表单字段组件可扩展
  3. 事件、联动通过eventbus 解耦
  4. 校验可扩展
  5. 表单布局可自定义
  6. 可视化配置

大概方案设计

vue自动化表单实例分析

使用

安装

npm install charlie-autoform charlie-autoform_component_lib

源码:https://charlielau.github.io/autoform/#/component/autoform

引入插件

import AutoForm from 'charlie-autoform';
import AutoForm_component_lib from 'charlie-autoform_component_lib';

Vue.use(AutoForm);
Vue.use(AutoForm_component_lib);

基本使用

demo.vue

<template>
 <div>
  <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>
 </div>
</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:[ //校验
    // {required:true,message:'必填'}
    // ""
    ]
   }
   }
  ]
  };
 }
 };
</script>

最终效果

vue自动化表单实例分析

添加自定义组件或者组件目录

Vue.$autoform.RegisterDir(()=>require.context('./components/autoform', 'c'));//目录
Vue.$autoform.Register(Vue,[Components...],{prefix: "c"}) //组件对象

cHello.vue

// PATH:/components/autoform/cHello.vue
<template>
 <div>
  <div>
   <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>
  </div>
 </div>
</template>

<script>
 import {baseField} from "charlie-autoform";
 export default {
  mixins: [baseField],
  name: 'cHello',
  data () {
   return {};
  },
  methods: {},
  mounted(){
   //this.eventBus 事件总线
  }
 };
</script>

成果

目前应用再多个系统

定性: 维护成本降低、关注点分离
定量:表单开发效率提升50%

源码:https://github.com/CharlieLau/autoform

Javascript 相关文章推荐
jQuery Ajax 全解析
Feb 08 Javascript
jquery动态加载图片数据练习代码
Aug 04 Javascript
javascript中有趣的反柯里化深入分析
Dec 05 Javascript
javascript 系统文件夹文件操作及参数介绍
Jan 08 Javascript
使用JS获取当前地理位置方法汇总
Dec 18 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
Mar 03 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
浅谈JavaScript变量的自动转换和语句
Jun 12 Javascript
详解Vue.js动态绑定class
Dec 20 Javascript
使用JavaScript实现链表的数据结构的代码
Aug 02 Javascript
ionic2中使用自动生成器的方法
Mar 04 Javascript
vuex实现像调用模板方法一样调用Mutations方法
Nov 06 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
May 06 #Javascript
JS中this的指向以及call、apply的作用
May 06 #Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
May 06 #Javascript
Less 安装及基本用法
May 05 #Javascript
es6新特性之 class 基本用法解析
May 05 #Javascript
JS同步、异步、延迟加载的方法
May 05 #Javascript
JavaScript生成指定范围随机数和随机序列的方法
May 05 #Javascript
You might like
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
php生出随机字符串
2017/07/06 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
Python常用特殊方法实例总结
2019/03/22 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
python对execl 处理操作代码
2020/06/22 Python
Python实现自动整理文件的脚本
2020/12/17 Python
Python操作Excel的学习笔记
2021/02/18 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
留守儿童工作方案
2014/06/02 职场文书
校园元旦活动总结
2014/07/09 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
2014个人年度工作总结
2014/12/15 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
会议邀请函
2015/01/30 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫