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 相关文章推荐
Javascript 文件夹选择框的两种解决方案
Jul 01 Javascript
jQuery 阴影插件代码分享
Jan 09 Javascript
jquery 选取方法都有哪些
May 18 Javascript
JavaScript的原型继承详解
Feb 15 Javascript
js跨域资源共享 基础篇
Jul 02 Javascript
js实现横向拖拽导航条功能
Feb 17 Javascript
Vue2.0表单校验组件vee-validate的使用详解
May 02 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
Feb 21 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
Oct 25 Javascript
浅入深出Vue之组件使用
Jul 11 Javascript
深入分析jQuery.one() 函数
Jun 03 jQuery
微信小程序实现首页弹出广告
Dec 03 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中的cookie
2006/11/26 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
2018/07/26 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
node express使用HTML模板的方法示例
2019/08/22 Javascript
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python调用新浪微博API项目实践
2014/07/28 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
详解Python学习之安装pandas
2019/04/16 Python
django之自定义软删除Model的方法
2019/08/14 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
介绍Ibatis的核心类
2013/11/18 面试题
《中彩那天》教学反思
2014/02/22 职场文书
如何写自我鉴定
2014/03/19 职场文书
会计实训报告范文
2014/11/04 职场文书
贷款承诺书
2015/01/20 职场文书
2015年测量员工作总结
2015/05/23 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js