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模拟实现Array的sort方法
Dec 11 Javascript
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
javascript中打印当前的时间实现思路及代码
Dec 18 Javascript
让IE8浏览器支持function.bind()方法
Oct 16 Javascript
jQuery插件制作之参数用法实例分析
Jun 01 Javascript
js实现点击链接后延迟3秒再跳转的方法
Jun 05 Javascript
js强制把网址设为默认首页
Sep 29 Javascript
AngularJS ng-template寄宿方式用法分析
Nov 07 Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 Javascript
谈谈JS中的!!
Dec 07 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 Javascript
Vant 中的Toast设置全局的延迟时间操作
Nov 04 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
建立文件交换功能的脚本(二)
2006/10/09 PHP
php中文字符截取防乱码
2008/03/28 PHP
php 数组使用详解 推荐
2011/06/02 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
php实现算术验证码功能
2018/12/05 PHP
JavaScript触发器详解
2007/03/10 Javascript
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
DOM 基本方法
2009/07/18 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
Koa日志中间件封装开发详解
2019/03/09 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
python中pycurl库的用法实例
2014/09/30 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
Python中itertools的用法详解
2020/02/07 Python
美国最大网上鞋店:Zappos
2016/07/25 全球购物
酒店爱岗敬业演讲稿
2014/09/02 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
python计算列表元素与乘积详情
2022/08/05 Python