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 DataSet数据源处理代码
Mar 29 Javascript
浅谈jQuery事件绑定原理
Jan 02 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 Javascript
如何使用HTML5地理位置定位功能
Apr 27 Javascript
jQuery满意度星级评价插件特效代码分享
Aug 19 Javascript
javaScript事件机制兼容【详细整理】
Jul 23 Javascript
深入浅出 jQuery中的事件机制
Aug 23 Javascript
学习vue.js中class与style绑定
Dec 03 Javascript
ES6新特性之函数的扩展实例详解
Apr 01 Javascript
bootstrap模态框远程示例代码分享
May 22 Javascript
jquery ajaxfileupload异步上传插件
Nov 21 jQuery
js获取浏览器地址(获取第1个斜杠后的内容)
Sep 03 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
牡丹941资料
2021/03/01 无线电
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
Python抓取手机号归属地信息示例代码
2016/11/28 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
python做接口测试的必要性
2019/11/20 Python
Python创建数字列表的示例
2019/11/28 Python
python 实现目录复制的三种小结
2019/12/04 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
国际花店:Pickup Flowers
2020/04/10 全球购物
2014年小班元旦活动方案
2014/02/16 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
学校端午节活动总结
2015/02/11 职场文书
试用期辞职信范文
2015/03/02 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers