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 相关文章推荐
用正则获取指定路径文件的名称
Feb 27 Javascript
jQuery toggle()设置CSS样式
Nov 05 Javascript
JavaScript 模拟用户单击事件
Dec 31 Javascript
JS 两个字符串时间的天数差计算
Aug 25 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
Mar 20 Javascript
七个不允许错过的jQuery小技巧
Dec 21 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
May 28 Javascript
关于vue中 $emit的用法详解
Apr 12 Javascript
微信小程序动态显示项目倒计时
Jun 20 Javascript
Bootstrap实现模态框效果
Sep 30 Javascript
es6中Promise 对象基本功能与用法实例分析
Feb 23 Javascript
原生js实现随机点名
Jul 05 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数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
JavaScript定义类的几种方式总结
2014/01/06 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
MVVM 双向绑定的实现代码
2018/06/21 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
Python实现的选择排序算法示例
2017/11/29 Python
python 对象和json互相转换方法
2018/03/22 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
Python常见数据类型转换操作示例
2019/05/08 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
浅析Python迭代器的高级用法
2020/07/16 Python
python3中布局背景颜色代码分析
2020/12/01 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
物业管理毕业生个人的求职信
2013/11/30 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
售后客服个人自我评价
2014/09/14 职场文书
2014年保卫工作总结
2014/12/05 职场文书
万能检讨书
2015/01/27 职场文书
李强感恩观后感
2015/06/17 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS