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 日期计算算法
Sep 11 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
Apr 15 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
Aug 24 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
May 20 Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 Javascript
jquery对象与DOM对象转化
Feb 08 Javascript
Node.js自定义实现文件路由功能
Sep 22 Javascript
JavaScript中的一些隐式转换和总结(推荐)
Dec 22 Javascript
基于Swiper实现移动端页面图片轮播效果
Dec 28 Javascript
javaScript实现游戏倒计时功能
Nov 17 Javascript
vue源码中的检测方法的实现
Sep 26 Javascript
JS实现4位随机验证码
Oct 19 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出错界面
2006/10/09 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
nodejs分页类代码分享
2014/06/17 NodeJs
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
Python中Unittest框架的具体使用
2019/08/27 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
门卫班长岗位职责
2013/12/15 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
行政处罚决定书
2015/06/24 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
Python中的嵌套循环详情
2022/03/23 Python