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插件splitScren实现页面分屏切换模板特效
Jun 16 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
Sep 14 Javascript
第三章之Bootstrap 表格与按钮功能
Apr 25 Javascript
JavaScript作用域示例详解
Jul 07 Javascript
Vue.js组件tabs实现选项卡切换效果
Dec 01 Javascript
Vue.js实现微信过渡动画左右切换效果
Jun 13 Javascript
Webpack打包css后z-index被重新计算的解决方法
Jun 18 Javascript
JS实现简易换图时钟功能分析
Jan 04 Javascript
解决Vue打包之后文件路径出错的问题
Mar 06 Javascript
vue计算属性及使用详解
Apr 02 Javascript
微信小程序 textarea 层级过高问题简单解决方案
Oct 14 Javascript
vue实现自定义多选按钮
Jul 16 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
CodeIgniter钩子用法实例详解
2016/01/20 PHP
JavaScript使用cookie
2007/02/02 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
2011/07/26 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
浅析javascript 定时器
2014/12/23 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
Python中用于返回绝对值的abs()方法
2015/05/14 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
详解Python中的type和object
2018/08/15 Python
Python安装selenium包详细过程
2019/07/23 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
python 瀑布线指标编写实例
2020/06/03 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
前台文员岗位职责及工作流程
2013/11/19 职场文书
广告设计应届生求职信
2014/03/01 职场文书
优质服务口号
2014/06/11 职场文书
学校清明节活动总结
2014/07/04 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript
python常见的占位符总结及用法
2021/07/02 Python