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 相关文章推荐
纯js写的分页表格数据为json串
Feb 18 Javascript
深入浅析JavaScript中的constructor
Apr 19 Javascript
基于javascript实现最简单选项卡切换
Feb 01 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
Mar 09 Javascript
详解vue-cli + webpack 多页面实例应用
Apr 25 Javascript
ionic 自定义弹框效果
Jun 27 Javascript
vue webuploader 文件上传组件开发
Sep 23 Javascript
ES6知识点整理之Proxy的应用实例详解
Apr 16 Javascript
判断js数据类型的函数实例详解
May 23 Javascript
简单了解JavaScript中的执行上下文和堆栈
Jun 24 Javascript
layui导出所有数据的例子
Sep 10 Javascript
微信小程序实现时间进度条功能
Nov 17 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的栏目导航程序
2006/10/09 PHP
php 方便水印和缩略图的图形类
2009/05/21 PHP
PHP基础知识介绍
2013/09/17 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
Javascript和jquery在selenium的使用过程
2019/10/31 jQuery
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
Python 字符串定义
2009/09/25 Python
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
Python理解递归的方法总结
2019/01/28 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
大学生个人推荐信范文
2013/11/25 职场文书
企业消防安全制度
2014/02/02 职场文书
企业办公室主任岗位职责
2014/02/19 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
2015年安全生产责任书
2015/01/30 职场文书
学校财务管理制度
2015/08/04 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL