使用form-create生成表单组件
FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持5个UI框架,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定
FormCreate官网:https://www.form-create.com
帮助文档:https://form-create.com/v3/
1. 生成内置组件
<template>
<div>
<form-create :rule="rule" v-model:api="fApi" :option="options" v-model="value">
</form-create>
</div>
</template> <script>
export default {
data() {
return {
fApi: {},
value: {},
options: {
onSubmit: (formData) => {
alert(JSON.stringify(formData))
},
resetBtn: true
},
rule: [
{type: 'input', field: 'field1', title: 'input', value: ''},
{type: 'datePicker', field: 'field2', title: 'date', value: ''},
]
}
}
}
</script>
2. 生成UI组件
<template>
<div>
<form-create :rule="rule" v-model:api="fApi" :option="options" v-model="value">
</form-create>
</div>
</template> <script>
export default {
data() {
return {
fApi: {},
value: {},
options: {
onSubmit: (formData) => {
alert(JSON.stringify(formData))
},
resetBtn: true
},
rule: [
{
type: 'AButton',
props: {
size: 'mini'
},
children: ['AButton']
},
{
type: 'AImage',
//非表单组件不会自动生成col,自定义组件需要通过native控制是否生成col
native: false,
props: {
width: '200px',
src: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
}
},
]
}
}
}
</script>
3. 生成自定义组件
<template>
<div>
<form-create :rule="rule" v-model:api="fApi" :option="options" v-model="value">
</form-create>
</div>
</template> <script>
import {h, defineComponent, resolveComponent} from 'vue'
import formCrate from '@form-create/ant-design-vue'
import formCreate from "@form-create/ant-design-vue";
// import UserSelect from "./UserSelect.vue";
//自定义表单组件
const UserSelect = defineComponent({
props: {
//预定义
disabled: Boolean,
modelValue: Number,
options: Array,
},
emits: ['update:modelValue'],
data: function () {
return {
value: this.modelValue,
}
},
render() {
return h(resolveComponent('ASelect'), {
disabled: this.disabled,
value: this.value,
'onUpdate:value': this.onChange,
options: this.options
});
},
watch: {
modelValue(n) {
//同步 value 的值
this.value = n
}
},
methods: {
onChange: function (val) {
this.value = val;
//更新组件内部的值
this.$emit('update:modelValue', val)
},
},
}); export default {
beforeCreate() {
//挂载组件
formCrate.component('UserSelect', UserSelect);
},
data() {
return {
fApi: {},
value: {},
options: {
onSubmit: (formData) => {
alert(JSON.stringify(formData))
},
resetBtn: true
},
rule: [
{
type: 'UserSelect',
field: 'field1',
title: '用户选择',
value: '小王',
props: {
options: [
{label: '小王', value: '小王'},
{label: '小李', value: '小李'},
]
},
},
]
}
}
}
</script>
4. 通过插槽生成组件
<template>
<div>
<form-create :rule="rule" v-model:api="fApi" :option="options" v-model="value">
</form-create>
</div>
</template> <script>
export default {
data() {
return {
fApi: {},
value: {},
options: {
onSubmit: (formData) => {
alert(JSON.stringify(formData))
},
resetBtn: true
},
rule: [
{
type: 'div',
style: 'width:200px;height:200x;background-color:#FF7271;',
children: [
{
type: 'span',
style: 'color:#FFFFFF;',
children: ['FormCreate']
}
]
},
]
}
}
}
</script>
5. 生成HTML标签
<template>
<div>
<form-create :rule="rule" v-model:api="fApi" :option="options" v-model="value">
<template #type-UserSelect="scope">
<ASelect :value="scope.model.value" v-bind="scope.prop" @update:value="scope.model.callback">
</ASelect>
</template>
</form-create>
</div>
</template> <script>
export default {
data() {
return {
fApi: {},
value: {},
options: {
onSubmit: (formData) => {
alert(JSON.stringify(formData))
},
resetBtn: true
},
rule: [
{
type: 'UserSelect',
field: 'field1',
title: '用户选择',
value: '小王',
props: {
options: [
{label: '小王', value: '小王'},
{label: '小李', value: '小李'},
]
},
},
]
}
}
}
</script>
使用form-create生成表单组件的更多相关文章
- 编写antd配置表单组件
编写antd配置表单组件 整体思路 抽取formitem的配置数组:包含组件类型.名称.label名称,相关的opts和扩展的opts,传递进入组件 组件通过Form.create()进行表单创建,能 ...
- 表单组件 form fastadmin(生成表单元素)
Form组件 定义文件位置: /extend/fast/Formphp 通用参数 $name 通常为我们组件的名称(name属性值),我们在后台接收时可以通过这个名称来获取到它所对应的值 $value ...
- Django form表单 组件
目录 Django form表单 组件 Form 组件介绍 普通方式手写注册功能 使用form组件实现注册功能 Form 常用字段与插件 常用字段(必备) 字段参数(必备) 内置验证(必备) 自定义效 ...
- Form( 表单) 组件
本节课重点了解 EasyUI 中 Form(表单)组件的使用方法, 这个组件不依赖于任何组件.一. 加载方式表单组件只能在 JS 区域设置,首先定义一张表单.<form id="box ...
- 第二百二十一节,jQuery EasyUI,Form(表单)组件
jQuery EasyUI,Form(表单)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Form(表单)组件的使用方法,这个组件不依赖于 ...
- Vue + Element-ui实现后台管理系统(5)---封装一个Form表单组件和Table表格组件
封装一个Form表单组件和Table组件 有关后台管理系统之前写过四遍博客,看这篇之前最好先看下这四篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-syste ...
- 封装react antd的form表单组件
form表单在我们日常的开发过程中被使用到的概率还是很大的,比如包含了登录.注册.修改个人信息.新增修改业务数据等的公司内部管理系统.而在使用时这些表单的样式如高度.上下边距.边框.圆角.阴影.高亮等 ...
- 封装Vue Element的form表单组件
前两天封装了一个基于vue和Element的table表格组件,阅读的人还是很多的,看来大家都是很认同组件化.高复用这种开发模式的,毕竟开发效率高,代码优雅,逼格高嘛.虽然这两天我的心情很糟糕,就像& ...
- vue自定义表单生成器,可根据json参数动态生成表单
介绍 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue 组件.结合内置17种常用表单组件和自定义组件,再复杂的表单都可 ...
- 基于PHP和mysql的自动生成表单
开发背景:公司要求管理系统能够由管理员在前台页面管理系统表单,能够对表单进行增删改查基本操作,表单的各个字段都可以被修改.删除,可以添加新的字段,并且不影响系统正常运行,前台表单展示要由系统自动处理, ...
随机推荐
- .net delegate 万能适配
遇到一个技术点,记一下,.net 有一个 Delegate Marshall.GetDelegateForFunctionPointer(IntPtr ptr, Type t) 用来将内存地址映射为一 ...
- Netty有关
https://www.baeldung.com/tag/netty/ https://github.com/eugenp/tutorials https://stackoverflow.com/qu ...
- LiquibaseException java.lang.ClassCastException: class java.time.LocalDateTime cannot be cast to class java.lang.String
https://forum.liquibase.org/t/liquibaseexception-java-lang-classcastexception-class-java-time-locald ...
- [springboot] mvn编译实现代码混淆
pom配置 <project> <build> <plugins> <plugin> <groupId>org.spri ...
- Socket、Http、WebSocket?强大的Netty几行语句就帮你实现!
一.概述 Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架,Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 相比 ...
- Qt编写跨平台RTSP/RTMP/HTTP视频流播放器
一.前言 很早以前就做过这款播放器的入门版本,最开始用的ffmpeg去解析,后面陆续用vlc播放器.mpv播放器来做,毕竟播放器提供的接口使用也很方便,而且功能强大,后面发现播放器主要的应用场景是播放 ...
- 主打一个“小巧灵动”:Vite + Svelte
作者:来自 vivo 互联网大前端团队- Wei Xing 在研发小型项目时,传统的 Vue.React 显得太"笨重".本文主要针对开发小型项目的场景,谈谈 Vite+Svel ...
- 记录uniapp上传图片转base64
// 图片转base64 imageToBase64() { return new Promise((reslove, reject) => { uni.getFileSystemManager ...
- consul简介
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置. Consul是分布式的.高可用的.可横向扩展的.它具备以下特性 : 服务发现:consul通过DNS或者HTT ...
- LeetCode刷题:343. 整数拆分的完全背包写法解析
dp的含义表示:从前i个数中挑选,满足和为j的最大乘积为多少.由于是乘积所以dp初始均为1.i为2开始是因为从1开始挑选,j为2开始应为有效数字是从2开始. 进一步空间优化,应为dp[i][j]只与其 ...