vue自定义表单生成器,可根据json参数动态生成表单
介绍
form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成器。并且支持生成任何 Vue 组件。结合内置17种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。
演示项目: 开源的高品质微信商城
功能
自定义组件
- 可生成任何Vue组件
- 自带数据验证
- 轻松转换为表单组件
通过 JSON 生成表单
通过 Maker 生成表单
强大的API,可快速操作表单
双向数据绑定
事件扩展
局部更新
数据验证
栅格布局
内置组件17种常用表单组件
对比 1.x
速度更快
体积更小
更强大的全局配置
自定义组件更容易扩展
更容易支持第三方 UI 库
更少的 bug
示例
通过 JSON 创建表单
通过 API 操作表单
@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 提交表单
- }
- }
- };
效果
实例对象 $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自定义表单生成器,可根据json参数动态生成表单的更多相关文章
- vue动态生成表单
vue动态生成表单 一.下拉框 <!DOCTYPE html> <html> <head> <meta charset="utf-8" / ...
- .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml)
.net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml) 首先设置 Startup.cs 文件 配置 ConfigureServices services .Add ...
- angular js根据json文件动态生成路由状态
项目上有一个新需求,就是需要根据json文件动态生成路由状态,查阅了一下资料,现在总结一下发出来: 首先项目用到的是angular的UI-路由,所以必须引入angular.js和angular-ui- ...
- Jquery 动态生成表单 并将表单数据 批量通过Ajax插入到数据库
利用Jquery 动态生成 Table 表单 之后利用each 方法来遍历所有文本框获取文本的value值 并通过Ajax 将数据 提交到Web服务里把数据插入数据库 Html页面 <!DOC ...
- .Net Mvc 返回Json,动态生成EasyUI Tree
最近做一个项目,开始接触EasyUI,感觉很强大,很适合我这种对前台不是很感冒的人.在学习Tree的过程中,感觉网上的资料挺乱的,很多只是把EasyUI API 抄了一遍.现在把最近这段时间的学到的, ...
- jsp页面根据json数据动态生成table
根据需求由于不同的表要在同一个jsp展示,点击某个表名便显示某张表内容,对于java后台传给jsp页面的json形式的数据是怎么动态生成table的呢? 找了好久,终于找到某位前辈的答案,在此表示衷心 ...
- js将json数据动态生成表格
今天开发中遇到需要展示动态数据的问题, 具体要求是后端传来的json字符串,要在前端页面以table表格的形式展示, 其实没啥难的,就是拼接table标签,纯属体力活,于是自己写了个呆萌,保存起来,以 ...
- 跨域jsonp+jQuery+json+html动态生成表格
1.什么是跨域 浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了. 凡是拥有scr这个属性 ...
- Sql Server备份表,动态生成表名称
1.常用的数据库备份表语句 SELECT * INTO tableNameNew FROM tableName 2.动态备份表,且备份表名称后面增加三位随机字符和当前日期 1 DECLARE @bak ...
随机推荐
- MEF、MAF和Unity的区别
在刚学习MEF时,经常会问一个问题,那就是MEF和MAF这样的插件框架.和Unity这样的IoC框架到底有什么区别.MEF与MAF(Managed Addin Framework)最大不同在于:前者关 ...
- C#管理服务停止启动
由于机器性能问题,把许多服务关闭了,需要用的时候再开启,这样每次都打开服务管理或cmd命令比较麻烦.就自己写了工具显示在桌面上; 声明:ServiceController myController = ...
- 关于DDD领域驱动设计的理论知识收集汇总
原文:关于DDD领域驱动设计的理论知识收集汇总 最近一直在学习领域驱动设计(DDD)的理论知识,从网上搜集了一些个人认为比较有价值的东西,贴出来和大家分享一下: 我一直觉得不要盲目相信权威,比如不能一 ...
- Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案
原文:Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案 一打开虚拟机电脑就立马蓝屏重启,新建虚拟机也没用,然后就开始 ...
- phpstudy+phpstorm+debug
文:phpstudy+phpstorm+debug 一.配置前说明: 1.phpStudy集成了XDebug扩展,所以不用单独下载XDebug. 2.打开XDebug扩展:其它选项菜单 > PH ...
- asp.net core2.0中网站发布的时候,视图文件不被打包成dll
项目csproj文件里面加 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <Target ...
- 从IntToHex()说起,栈/堆地址标准写法 good
学习中的一些牢骚.栈/堆地址标准写法. 2017-02-12 • 杂谈 • 暂无评论 • 老衲 •浏览 226 次 我一直都在寻找各种业务功能的最简单写法,用减法的模式来开发软件.下面是我的写法,如果 ...
- Git 常用命令大全(转)
Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone g ...
- Fabric1.4源码解析:Peer节点背书提案过程
以前从来没有写过博客,从这段时间开始才开始写一些自己的博客,之前总觉得写一篇博客要耗费大量的时间,而且写的还是自己已经学会的,觉得没什么必要.但是当开始用博客记录下来的时候,才发现有些学会的地方只是自 ...
- Arm架构下VUE环境的安装
最近因为项目需要在arm环境下搭建vue环境,网上有基于Linux的 教程,路径略有不同,现整理如下 1.安装文件下载 1.下载地址:http://nodejs.cn/download/ 2.选择一个 ...