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创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
Jun 28 Javascript
javascript学习笔记(四)function函数部分
Sep 30 Javascript
Javascript 是你的高阶函数(高级应用)
Jun 15 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 Javascript
freemarker判断对象是否为空的方法
Aug 13 Javascript
Bootstrap每天必学之导航条(二)
Mar 01 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
May 11 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
jQuery生成假加载动画效果
Dec 01 Javascript
js实现自动图片轮播代码
Mar 22 Javascript
详解Vue组件之间的数据通信实例
Jun 17 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
May 10 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
详解javascript函数的参数
2015/11/10 Javascript
JS闭包与延迟求值用法示例
2016/12/22 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
考试没考好检讨书
2014/01/31 职场文书
教师绩效工资方案
2014/02/01 职场文书
索桥的故事教学反思
2014/02/06 职场文书
委托书样本
2014/04/02 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
2014年行政工作总结
2014/11/19 职场文书
2014年销售部工作总结
2014/12/01 职场文书
闪闪红星观后感
2015/06/08 职场文书
李强为自己工作观后感
2015/06/11 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
MySQL的join buffer原理
2021/04/29 MySQL
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android