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 当前日期转化为中文的实现代码
May 13 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
Sep 01 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
May 19 Javascript
javascript 判断两个日期之差的示例代码
Sep 05 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 Javascript
vue中实现滚动加载更多的示例
Nov 08 Javascript
详解Eslint 配置及规则说明
Sep 10 Javascript
微信小程序实现音频文件播放进度的实例代码
Mar 02 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
Sep 25 Javascript
聊聊vue 中的v-on参数问题
Jan 29 Vue.js
ES6 解构赋值的原理及运用
May 25 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
香妃
2021/03/03 冲泡冲煮
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
DOM下的节点属性和操作小结
2009/05/14 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
python conda操作方法
2019/09/11 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
大学生实习思想汇报
2014/01/12 职场文书
作息时间调整通知
2015/04/22 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
MySQL 如何分析查询性能
2021/05/12 MySQL