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实现的完美渐变弹出层效果代码
Apr 02 Javascript
jQuery-Tools-overlay 使用介绍
Jul 14 Javascript
详解Webwork中Action 调用的方法
Feb 02 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
Jul 20 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
基于JavaScript实现的插入排序算法分析
Apr 14 Javascript
微信小程序的分类页面制作
Jun 27 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
JavaScript 作用域scope简单汇总
Oct 23 Javascript
Vue中this.$nextTick的作用及用法
Feb 04 Javascript
JS+CSS实现动态时钟
Feb 19 Javascript
JavaScript实现酷炫的鼠标拖尾特效
Feb 18 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 SQL Injection with MySQL
2011/02/27 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
js 覆盖和重载 函数
2009/09/25 Javascript
基于jQuery的获取标签名的代码
2012/07/16 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
JS回调函数深入理解
2019/10/16 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python实现ATM系统
2020/02/17 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
《孔子游春》教学反思
2014/02/25 职场文书
工程管理英文求职信
2014/03/18 职场文书
访谈节目策划方案
2014/05/15 职场文书
小学老师对学生的评语
2014/12/29 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python