vue自定义表单生成器form-create使用详解


Posted in Javascript onJuly 19, 2019

介绍

form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成器。并且支持生成任何 Vue 组件。结合内置17种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。

文档 | github

演示项目: 开源的高品质微信商城

功能

  • 自定义组件
    • 可生成任何Vue组件
    • 自带数据验证
    • 轻松转换为表单组件
  • 通过 JSON 生成表单
  • 通过 Maker 生成表单
  • 强大的API,可快速操作表单
  • 双向数据绑定
  • 事件扩展
  • 局部更新
  • 数据验证
  • 栅格布局
  • 内置组件17种常用表单组件

对比 1.x

  • 速度更快
  • 体积更小
  • 更强大的全局配置
  • 自定义组件更容易扩展
  • 更容易支持第三方 UI 库
  • 更少的 bug

示例

通过 JSON 创建表单

vue自定义表单生成器form-create使用详解

通过 API 操作表单

vue自定义表单生成器form-create使用详解

@form-create包说明

名称 说明
@form-create/iview iview 版表单生成器
@form-create/element-ui element-ui 版表单生成器
@form-create/core form-create 核心包
@form-create/utils form-create 工具包
@form-create/data 省市区多级联动数据

使用

以element-ui版本为例介绍如何在项目中使用 form-create

安装

npm i @form-create/element-ui

挂载

全局注册

import formCreate form '@form-create/element-ui';

Vue.use(formCreate);

局部挂载

import formCreate form '@form-create/element-ui';

export default {
  components:{
    formCreate:formCreaet.$form()
  }
}

生成表单

<template>
  <form-create v-model="$f" :rule="rule" @on-submit="onSubmit"></form-create>
</template>
export default {
 data () {
  return {
   //表单实例对象
   $f:{},
   //表单生成规则
   rule:[
    {
     type:'input',
     field:'goods_name',
     title:'商品名称'
    },
    {
     type:'datePicker',
     field:'created_at',
     title:'创建时间'
    }
   ]
  };
 },
 methods:{
   onSubmit(formData){
     //TODO 提交表单
   }
 }
};

效果

vue自定义表单生成器form-create使用详解

实例对象 $f

可以通过 $f 快速操作表单,例如:

  • $f.hidden:隐藏指定组件
  • $f.validate:验证表单
  • $f.setValue:修改表单组件的值
  • $f.append:追加表单组件

自定义组件

生成

通过标签生成

{
  type:'el-button',
  name: 'btn',
  props:{
    type:'primary',
    field:'btn',
    loading:true
  },
  children:['加载中']
}

通过模板生成

{
  type:'template',
  name:'btn'
  template:'<el-button :loading="loading">{{text}}<el-button>',
  vm: new Vue({
   data:{
    loading:true,
    text:'加载中'
   }
  })
}

转换为表单组件

自定义组件转换为表单组件后,可通过$f.formData,$f.getValue,$f.setValue,$f.disabled等方法快速操作组件,达到和内置组件相同的效果

预定义

props

在自定义组件内部通过props接收一下属性

  • value 表单的值
  • disabled 组件的禁用状态

例如:

vm = Vue({
 props:{
  value:String,
  disabled:Boolean   
 }
})

input 事件

通过input事件更新组件内部的值

当组件值发生变化后,通过 input 事件更新值.例如:

vm.$emit('input',newValue);

挂载自定义组件

要生成的自定义组件必须通过Vue.component方法挂载到全局,或者通过formCreate.component方法挂载

例如:

formCreate.component('TestComponent',component);

或者

Vue.component('TestComponent',component);

生成

表单组件必须定义field属性

JSON

{
  type:'TestComponent',
  value:'test',
  field:'testField',
  title:'自定义组件'
}

Maker

formCreate.maker.create('TestComponent','testField','自定义组件').value('test')

示例

自定义计数器按钮组件,获取按钮点击数.该组件的功能和内置组件相同

formCreate.maker.template('<el-button @click="onClick" long :disabled="disabled">计数器-{{num}}</el-button>', new Vue({
 props:{
  //预定义
  disabled:Boolean,
  value:Number,
 },
 data: function () {
  return {
    num: this.value,
  }
 },
 watch:{
  value(n){
    this.num = n;
  }
 },
 methods: {
  onClick: function () {
    this.num++;
    //更新组件内部的值
    this.$emit('input',this.num);
  },
 },
}), 'tmp', '自定义 title').value(100).props('disabled',false)

完整示例

vue自定义表单生成器form-create使用详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 18 Javascript
完整显示当前日期和时间的JS代码
Sep 17 Javascript
js 数组的for循环到底应该怎么写?
May 31 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
jquery实现全选、不选、反选的两种方法
Sep 06 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
Nov 07 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
Mar 15 Javascript
在vue中获取dom元素内容的方法
Jul 10 Javascript
javascript系统时间设置操作示例
Jun 17 Javascript
详解如何在Javascript和Sass之间共享变量
Nov 13 Javascript
小程序自定义模板实现吸顶功能
Jan 08 Javascript
Node.js 中判断一个文件是否存在
Aug 24 Javascript
bootstrap table列和表头对不齐的解决方法
Jul 19 #Javascript
JS开发 富文本编辑器TinyMCE详解
Jul 19 #Javascript
更强大的vue ssr实现预取数据的方式
Jul 19 #Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 #Javascript
bootstrap table实现横向合并与纵向合并
Jul 18 #Javascript
微信小程序判断用户是否需要再次授权获取个人信息
Jul 18 #Javascript
Vue动态生成表格的行和列
Jul 18 #Javascript
You might like
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
JS跨域总结
2012/08/30 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
本科毕业生应聘求职信
2014/07/06 职场文书
外科护士长工作总结
2015/08/12 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书