当前位置: 首页 > news >正文

vue2-表单组件封装

创建组件

components/test/index.vue

<template><el-form :model="formData">// <!-- 具名插槽 --><slot name="header" /><el-form-itemv-for="(item, index) in formItem":key="index":label="item.label":label-width="labelWith"><template v-if="item.type === 'input'"><el-input v-model="formData[item.field]" /></template><template v-else-if="item.type === 'switch'"><el-switch v-model="formData[item.field]" /></template><template v-else><el-select v-model="formData[item.field]" @change="(e) => issueEvent(e, item.onChange)"><el-optionv-for="opt in item.option":key="opt.value":label="opt.label":value="opt.value"/></el-select></template></el-form-item>// <!-- 具名插槽 --><slot name="footer" /></el-form>
</template><script>
export default {props: {labelWith: {type: String,default: '100px'},formData: {type: Object,default: () => {}},formItem: {type: Array,default: () => []}},created() {console.log(this.formData, 'formData')},methods: {// 重点在issueEvent函数,可以给事件绑定一个空函数避免报错,如果有外部传入的自定义函数则返回这个函数/* 组件内函数负责分发表单项事件 */issueEvent(value, mouseEvent) {if (mouseEvent) {return mouseEvent(value)}}}
}
</script><style lang="scss" scoped></style>

表单项数据配置

export default {formItem: [{type: 'input',label: '颜色',field: 'color'},{type: 'select',label: '选择大小',field: 'size',option: [{ label: 'S', value: '0' },{ label: 'M', value: '1' }],onChange: (val) => { // 传入事件console.log(val, 'val123')}},{type: 'input',label: '爱好',field: 'hobbies'},{type: 'switch',label: '开关',field: 'state'},{type: 'select',label: '选择版本',field: 'version',option: [{ label: '1.1', value: '0' },{ label: '2.1', value: '1' }]}]
}

使用组件

注意:必须把表单项要绑定的数据变成响应式数据,使用 this.$set(object, propertyName, value)

  • object:要添加属性的目标对象。
  • propertyName:要添加的属性的名称。
  • value:要设置的属性值。
<template><MyTest :form-data="formData" :form-item="formItem"><template #header>新增客户</template><template #footer><el-button type="primary" @click="submit">确定</el-button><el-button>取消</el-button></template></MyTest>
</template><script>
import formConfig from '@/config/test/testConfig'
import MyTest from '@/components/test/index.vue'
export default {components: {MyTest},data() {return {formData: {}, // 表单数据formItem: formConfig.formItem ?? [] // ?? 表示空值合并操作符}},created() {this.formItem.forEach((item) => {/*** 使用了 Vue 实例的 $set 方法来确保 formData 对象的属性是响应式的。* $set 方法是 Vue 2 中用来向响应式对象添加一个属性并确保这个新属性同样是响应式的。*/this.$set(this.formData, item.field, item.type === 'switch' ? false : '')})},methods: {submit() {console.log(this.formData, 'formData')}}
}
</script><style lang="scss" scoped></style>

封装 el-select

由于el-select的option数据是异步请求过来的
所以要特殊处理下

表单项数据配置

import { getDepartmentList } from '@/api/department'
// 返回一个Promise,该Promise在解析时返回一个包含formItem的对象
export default async function getFormItem() {const res = await getDepartmentList()const departmentList = res.datareturn ([{type: 'select',label: '部门',field: 'departmentId',option: departmentList.map(department => ({ // 注意:这里假设departmentList是一个数组,并且每个元素都有一个可以显示的属性(比如name)label: department.name, // 根据实际情况修改value: department.id // 根据实际情况修改}))}])
}

使用组件

<template><my-form :form-data="formData" :form-item="formItem" />
</ template>
<script>data() {return {formData: {}, // 表单数据// formItem: commonConfig.formItem ?? [] // ?? 表示空值合并操作符formItem: []}},async created() {this.formItem = await getFormItem()console.log(this.formItem, 'formItem')this.formItem.forEach((item) => {/*** 使用了 Vue 实例的 $set 方法来确保 formData 对象的属性是响应式的。* $set 方法是 Vue 2 中用来向响应式对象添加一个属性并确保这个新属性同样是响应式的。*/this.$set(this.formData, item.field, '')})},
</ script>

相关文章:

vue2-表单组件封装

创建组件 components/test/index.vue <template><el-form :model"formData">// <!-- 具名插槽 --><slot name"header" /><el-form-itemv-for"(item, index) in formItem":key"index":label"item.la…...

智能家居4 -- 添加接收消息的初步处理

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 receive_interface.c #include <pthread.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <…...

Python selenium

1.搭建环境 1.安装&#xff1a; pip install msedge-selenium-tools 不要使用pip install selenium&#xff0c;我的电脑上没法运行 2.下载驱动 Microsoft Edge WebDriver |Microsoft Edge 开发人员 edge浏览器点设置---关于即可找到版本号&#xff0c;一定要下载对应版…...

Python内置函数next()详解

Python的next()函数是一个内置函数&#xff0c;用于从迭代器中获取下一个元素。如果迭代器耗尽&#xff0c;则抛出StopIteration异常。 函数定义 next()函数的基本语法如下&#xff1a; next(iterator[, default])iterator&#xff1a;一个迭代器对象。default&#xff1a;可…...

初识指针(1)<C语言>

前言 指针是C语言中比较难的一部分&#xff0c;大部分同学对于此部分容易产生“畏难情结”&#xff0c;但是学习好这部分对C语言的深入很大的帮助&#xff0c;所以此篇主要以讲解指针基础为主。 指针概念 变量创建的本质就是在内存中申请空间&#xff0c;找到这个变量就需要地址…...

uniapp使用vconsole调试 兼容App

前言&#xff1a;引入vconsole发现uniapp打出来的包里&#xff0c;看不到vconsole&#xff0c;uniapp开发的h5需要使用vconsole真机调试&#xff0c;如果直接在main.ts引入&#xff0c;打包后整个项目会页面空白&#xff0c;经实验在单个页面引入可解决&#xff0c;以下是解决方…...

论文笔记模版

1. 摘要 1.1 背景 1.2 挑战 1.3 提出新方法 1.4 贡献 2. 引言 2.1 背景&#xff08;引出问题&#xff09; ①介绍大背景&#xff1a; ② 应用场景&#xff1a; ③ 介绍主题&#xff1a; 2.2 引出挑战 一般用图表来展现出我们的挑战&#xff08;直观&#xff0c;解决什…...

docker-本地私有仓库、harbor私有仓库部署与管理

一、本地私有仓库&#xff1a; 1、本地私有仓库简介&#xff1a; docker本地仓库&#xff0c;存放镜像&#xff0c;本地的机器上传和下载&#xff0c;pull/push。 使用私有仓库有许多优点&#xff1a; 节省网络带宽&#xff0c;针对于每个镜像不用每个人都去中央仓库上面去下…...

【Go 语言入门专栏】Go 语言的起源与发展

前言 Go 语言是当下最为流行的编程语言之一&#xff0c;大约在 2020、2021 年左右开始于国内盛行&#xff0c;许多大厂很早就将部分 Java 项目迁移到了 Go&#xff0c;足可看出其在性能方面的优越性。 相信各位都知道&#xff0c;在爬虫业务中&#xff0c;并发是一个关键的需…...

发电机组远程管理,提升管控力,降低运维成本

发电机组是指发电机发动机以及控制系统的总称&#xff0c;用来把发动机提供的动能转化为电能。它通常由动力系统、控制系统、消音系统、减震系统、排气系统组成。发电机组远程管理系统利用物联网技术与PLC远程控制模块集成解决方案&#xff0c;在提高发电机组的运行效率、降低运…...

java将文件压缩打包后进行下载

今天受到一个需求&#xff0c;需要查出文件&#xff0c;然后将文件打包后下载。看了下项目里默认代码有压缩功能&#xff0c;以此修改了下&#xff0c;项目使用了hutool。项目是若依项目 定义zip的数据传输对象&#xff0c;ossId可以是文件表的id Data public class SysOssZi…...

【4/26-4/30】 Arxiv安全类文章速览

4/26 标题: Merchants of Vulnerabilities: How Bug Bounty Programs Benefit Software Vendors 作者: Esther Gal-Or, Muhammad Zia Hydari, Rahul Telang摘要: 软件漏洞允许恶意黑客利用&#xff0c;威胁系统和数据安全。本文研究了激励道德黑客发现并负责任地向软件供应商披…...

活动图与状态图:UML中流程图的精细化表达——专业解析系统动态性与状态变迁

流程图是一种通用的图形表示法&#xff0c;用以展示步骤、决策和循环等流程控制结构。它通常用于描述算法、程序执行流程或业务过程&#xff0c;关注于任务的顺序执行。流程图强调顺序、分支和循环&#xff0c;适用于详细说明具体的处理步骤&#xff0c;图形符号相对基础和通用…...

Easy TCP Analysis提供了四大特性,兼顾了TCP数据包分析入门学习到实战问题排查不同阶段用户对工具的需求

一款兼顾TCP数据包分析入门学习和实战不同阶段用户需求的工具 Easy TCP Analysis是一款在线TCP数据包分析工具&#xff0c;致力于让TCP数据包分析变得跟看聊天记录一样简单&#xff01; Easy TCP Analysis提供了四大特性&#xff0c;兼顾了从入门学习到实战分析不同阶段用户对…...

【2】STM32·FreeRTOS·任务创建和删除

目录 一、任务创建和删除的API函数 1.1、动态创建任务函数 1.2、静态创建任务函数 1.3、任务删除函数 二、任务创建和删除&#xff08;动态方法&#xff09; 三、任务创建和删除&#xff08;静态方法&#xff09; 一、任务创建和删除的API函数 任务的创建和删除本质就是…...

日志审计系统在提高网络安全方面具有哪些重要的作用

随着信息技术的飞速发展&#xff0c;我们正处于一个高度互联、数据驱动的网络时代。在这个时代&#xff0c;日志审计系统作为网络安全和信息管理的重要工具&#xff0c;发挥着至关重要的作用。下面德迅云安全就详细介绍下关于日志审计系统在当今网络时代的重要性。 一、什么是日…...

二维泊松方程(Neumann+Direchliet边界条件)有限元Matlab编程求解|程序源码+说明文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…...

13_Scala面向对象编程_伴生对象

文章目录 1.伴生对象1.1 scala的一个性质&#xff0c;scala文件中的类都是公共的&#xff1b;1.2 scala使用object关键字也可以声明对象&#xff1b; 3.关于伴生对象和类4.权限修饰符&#xff0c;scala仅有private;5.伴生对象可以访问伴生类中的私有属性&#xff1b;6.案例7.伴…...

RS485空调系统到BACnet江森楼宇系统的高效整合攻略

智慧城市的每一栋建筑都在追求更高的能效与更佳的居住体验&#xff0c;而这一切的实现离不开强大且灵活的楼宇自动化系统。其中&#xff0c;协议转换网关作为连接不同设备的纽带&#xff0c;扮演着至关重要的角色。本文将以一个典型的商业综合体为例&#xff0c;揭秘BACnet协议…...

Springboot集成Redis操作缓存-06

Redis简介 Redis&#xff08;Remote Dictionary Server&#xff09;&#xff0c;即远程字典服务&#xff0c;是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 功能特点 数据结构丰富&#…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...