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 弹出层实现代码
Oct 30 Javascript
Extjs在exlipse中设置自动提示的方法
Apr 07 Javascript
js判断IE浏览器版本过低示例代码
Nov 22 Javascript
Jquery异步提交表单代码分享
Mar 26 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
Nov 16 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
Jun 12 Javascript
JavaScript操作表单实例讲解(上)
Jun 20 Javascript
JavaScript面向对象编写购物车功能
Aug 19 Javascript
微信小程序 教程之事件
Oct 18 Javascript
jQuery 获取select选中值及清除选中状态
Dec 13 Javascript
JS中使用正则表达式g模式和非g模式的区别
Apr 01 Javascript
JavaScript数组的5种迭代方法
Sep 29 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中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
Vue项目History模式404问题解决方法
2018/10/31 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
python生成随机mac地址的方法
2015/03/16 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
什么是serialVersionUID
2016/03/04 面试题
某科技软件测试面试题
2013/05/19 面试题
2014年向国旗敬礼活动总结
2014/09/27 职场文书
群众路线个人剖析材料
2014/10/07 职场文书
孟佩杰观后感
2015/06/17 职场文书
2016党校培训心得体会
2016/01/07 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs