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 相关文章推荐
javascript iframe中打开文件,并检测iframe存在否
Dec 28 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
Apr 02 Javascript
js中查找最近的共有祖先元素的实现代码
Dec 30 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
Aug 01 Javascript
javascript生成json数据简单示例分享
Feb 14 Javascript
使用JS获取当前地理位置方法汇总
Dec 18 Javascript
javascript页面倒计时实例
Jul 25 Javascript
自己动手写的javascript前端等待控件
Oct 30 Javascript
javascript内存分配原理实例分析
Apr 10 Javascript
使用JS和canvas实现gif动图的停止和播放代码
Sep 01 Javascript
webpack4.0打包优化策略整理小结
Mar 30 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
Jun 09 jQuery
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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
go语言计算两个时间的时间差方法
2015/03/13 Python
Python操作csv文件实例详解
2017/07/31 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
容易被忽略的Python内置类型
2020/09/03 Python
Python实现壁纸下载与轮换
2020/10/19 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
日语系毕业生推荐信
2013/11/11 职场文书
体育教师自我鉴定
2014/02/12 职场文书
营销与策划实训报告
2014/11/05 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
武夷山导游词
2015/02/03 职场文书
电影雨中的树观后感
2015/06/15 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
2015年重阳节主持词
2015/07/04 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS