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 相关文章推荐
对xmlHttp对象的理解
Jan 17 Javascript
window.open不被拦截的实现代码
Aug 22 Javascript
关闭ie窗口清除Session的解决方法
Jan 10 Javascript
使用jQuery和PHP实现类似360功能开关效果
Feb 12 Javascript
jQuery动态星级评分效果实现方法
Aug 06 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
jquery实现横向图片轮播特效代码分享
Nov 19 Javascript
Web开发必知Javascript技巧大全
Feb 23 Javascript
node.js cookie-parser之parser.js
Jun 06 Javascript
JavaScript计算器网页版实现代码分享
Jul 15 Javascript
p5.js入门教程之平滑过渡(Easing)
Mar 16 Javascript
WEB前端性能优化的7大手段详解
Feb 04 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
python flask实现分页效果
2017/06/27 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
python爬虫添加请求头代码实例
2019/12/28 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
党员违纪检讨书
2014/02/18 职场文书
应届生找工作求职信
2014/06/24 职场文书
学校师德师风整改方案
2014/10/28 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
交通安全月活动总结
2015/05/08 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
吃通javascript正则表达式
2021/04/21 Javascript
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python