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 相关文章推荐
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 Javascript
不用写JS也能使用EXTJS视频演示
Dec 29 Javascript
js遍历td tr等html元素
Dec 13 Javascript
使用PHP+JQuery+Ajax分页的实现
Apr 23 Javascript
使用npm发布Node.JS程序包教程
Mar 02 Javascript
EasyUI学习之Combobox下拉列表(1)
Dec 29 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
详解Angular2学习笔记之Html属性绑定
Jan 03 Javascript
angular动态表单制作
Feb 23 Javascript
运用js实现图层拖拽的功能
May 24 Javascript
一篇文章学会Vue中间件管道
Jun 20 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
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高手?学会“懒惰”的编程
2006/12/05 PHP
IStream与TStream之间的相互转换
2008/08/01 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
jquery 弹出层实现代码
2009/10/30 Javascript
jQuery ajax cache缓存问题
2010/07/01 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
vue v-model的用法解析
2020/10/19 Javascript
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
python得到电脑的开机时间方法
2018/10/15 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
体育专业个人的求职信范文
2013/09/21 职场文书
应届毕业生就业自荐信
2013/10/26 职场文书
物流仓管员岗位职责
2013/12/04 职场文书
表彰先进集体通报
2014/01/12 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
食品安全责任书范本
2015/05/09 职场文书
城南旧事观后感
2015/06/11 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
公司会议开幕词
2016/03/03 职场文书
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript