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 相关文章推荐
WordPress 插件——CoolCode使用方法与下载
Jul 02 Javascript
javascript网页关闭时提醒效果脚本
Oct 22 Javascript
IE8 chrome中table隔行换色解决办法
Jul 09 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
Feb 06 Javascript
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
对Web开发中前端框架与前端类库的一些思考
Mar 27 Javascript
javascript正则表达式定义(语法)总结
Jan 08 Javascript
Bootstrap的class样式小结
Dec 01 Javascript
微信小程序动态的加载数据实例代码
Apr 14 Javascript
详解Vue快速零配置的打包工具——parcel
Jan 16 Javascript
使用Javascript简单计算器
Nov 17 Javascript
浅谈关于vue中scss公用的解决方案
Dec 02 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 动态多文件上传
2009/01/18 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
js location.replace与location.reload的区别
2010/09/08 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
javascript中replace( )方法的使用
2015/04/24 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
总结Python编程中三条常用的技巧
2015/05/11 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
使用python存储网页上的图片实例
2018/05/22 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
我们的节日端午节活动方案
2014/03/02 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
四风查摆剖析材料
2014/10/10 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
故宫导游词
2015/01/31 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python