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 相关文章推荐
js传值 判断
Oct 26 Javascript
IE innerHTML,outerHTML所引起的问题
Jun 04 Javascript
JavaScript 题型问答有答案参考
Feb 17 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
Dec 19 Javascript
JavaScript+html5 canvas实现本地截图教程
Apr 16 Javascript
JS简单生成两个数字之间随机数的方法
Aug 03 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 Javascript
Vue 配合eiement动态路由,权限验证的方法
Sep 26 Javascript
从源码里了解vue中的nextTick的使用
Nov 22 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
Aug 29 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
Nov 27 Javascript
js实现html滑动图片拼图验证
Jun 24 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
人族 TERRAN 概述
2020/03/14 星际争霸
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
JavaScript错误处理
2015/02/03 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
跟老齐学Python之集合的关系
2014/09/24 Python
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
python入门教程之识别验证码
2017/03/04 Python
详解python调度框架APScheduler使用
2017/03/28 Python
Python中格式化format()方法详解
2017/04/01 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
pygame实现俄罗斯方块游戏(基础篇1)
2019/10/29 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
Python修改DBF文件指定列
2020/12/19 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
中专生自我鉴定
2013/12/17 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
大学四年个人自我小结
2014/03/05 职场文书
导游词之青城山景区
2019/09/27 职场文书
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers