Element-plus弹出框popover,使用自定义的图标选择组件

自定义的图标选择组件是若依的项目的

在这里插入图片描述

1. 若依的图标选择组件

  • js文件,引入所有的svg图片
let icons = []
// 注意这里的路径,一定要是自己svg图片的路径
const modules = import.meta.glob('./../../assets/icons/svg/*.svg');
for (const path in modules) {const p = path.split('assets/icons/svg/')[1].split('.svg')[0];icons.push(p);
}export default icons
  • vue组件
    1. 自定义的SvgIcon组件,每个人定义的方式都不用,这里重要的就是name属性:图片的名字
    2. defineProps:activeIcon: 用于返显用户已经选择或者原本就存在的图标
    3. meit:订阅selected事件,发送用户当前选择的图标
    4. defineExpose:reset方法,向外抛出方法,在父组件中可以清除搜索框中的内容
<template><div class="icon-body"><el-inputv-model="iconName"class="icon-search"clearableplaceholder="请输入图标名称"@clear="filterIcons"@input="filterIcons"><template #suffix><SvgIcon name="search"/></template></el-input><div class="icon-list"><div class="list-container"><div v-for="(item, index) in iconList" class="icon-item-wrapper" :key="index" @click="selectedIcon(item)"><div :class="['icon-item', { active: activeIcon === item }]"><!--自定义的SvgIcon组件,每个人定义的方式都不用,这里重要的就是name属性:图片的名字--><SvgIcon :name="item" class-name="icon" style="height: 25px;width: 16px;"/><span>{{ item }}</span></div></div></div></div></div>
</template><script setup>
import icons from './requireIcons'
import SvgIcon from '@/components/svgicon/SvgIcon.vue'
// activeIcon: 用于返现用户已经选择的图标
const props = defineProps({activeIcon: {type: String}
});const iconName = ref('');
const iconList = ref(icons);
// 订阅selected时间,发送用户当前选择的图标
const emit = defineEmits(['selected']);// 通过js文件中的方法,将icon/svg文件夹中的图标的名字取出来
function filterIcons() {iconList.value = iconsif (iconName.value) {iconList.value = icons.filter(item => item.indexOf(iconName.value) !== -1)}
}function selectedIcon(name) {emit('selected', name)document.body.click()
}function reset() {iconName.value = ''iconList.value = icons
}
// 向外抛出方法:在父组件中可以清除搜索框中的内容
defineExpose({reset
})
</script><style lang='scss' scoped>.icon-body {width: 100%;padding: 10px;.icon-search {position: relative;margin-bottom: 5px;width: 50%;}.icon-list {height: 200px;overflow: auto;.list-container {display: flex;flex-wrap: wrap;.icon-item-wrapper {width: calc(100% / 3);height: 25px;line-height: 25px;cursor: pointer;display: flex;.icon-item {display: flex;max-width: 100%;height: 100%;padding: 0 5px;&:hover {background: #ececec;border-radius: 5px;}.icon {flex-shrink: 0;}span {display: inline-block;vertical-align: -0.15em;fill: currentColor;padding-left: 2px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}}.icon-item.active {background: #ececec;border-radius: 5px;}}}}}
</style>

2. 在项目中引入组件

引入组件 <IconSelect @selected="iconSelected" ref="iconSelect" :activeIcon="formData.icon"/>

  1. @selected="iconSelected":接收子组件发送的事件,图标被选中
  2. :activeIcon="formData.icon":给子组件传递图标,比如在修改数据时,数据中原本就存在图标
  3. ref="iconSelect":使用子组件的实例,调用子组件抛出的方法
<el-popoverplacement="bottom-start":width="200"trigger="click"
><!-- popover弹出框的插槽,这个插槽的决定了弹出框在页面显示的效果,这里显示的是input输入框 --><template #reference><el-input v-model="formData.icon" placeholder="请选择图标" clearable @clear="clearIconInput"><!-- input的插槽,input框前面显示的图标 --><template #prefix><svg-icon v-if="formData.icon" :name="formData.icon" /><svg-icon v-else name="search" /></template></el-input></template><!-- popover弹出框的插槽,这个插槽决定弹出框弹出后显示的内容,这里显示的是IconSelect组件 --><template #default><!-- 弹出框的内容是自定义组件 --><IconSelect style="background-color: #fff;width:500px;border:1px black solid" @selected="iconSelected" ref="iconSelect" :activeIcon="formData.icon"/></template>
</el-popover>
<script setup>
const formData = reactive({icon: undefined,
})
// 子组件的ref,用户调用子组件中defineExpose暴露的方法
const iconSelectRef = useTemplateRef("iconSelect")
// 子组件IconSelect通过emit发送的订阅消息
const iconSelected = (name) => {formData.icon = name
}
// 调用子组件iconSelect的reset方法
const clearIconInput = () => {formData.icon = undefinediconSelectRef.value.reset()
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openmv用了4个了,烧了2个,质量堪忧啊

都是原装货&#xff0c;主板出现过存储不完全、图像存不上、主板代码保存乱码、意外出现乱码的现象。 希望要用的童鞋谨慎使用。

基于DrissionPage的Taptap热门游戏数据爬虫实战:从Requests到现代爬虫框架的迁移指南(含完整代码复制)

目录 ​编辑 一、项目重构背景与技术选型 1.1 原代码问题分析 1.2 DrissionPage框架优势 二、环境配置与基础改造 2.1 依赖库安装 2.2 基础类改造 三、核心功能模块重构 3.1 请求参数自动化生成 3.2 智能页面渲染 3.3 数据解析优化 四、数据库操作增强 4.1 批量插入…

解析K8S四层网络设计

模仿七层网络模型&#xff0c;抽象出四层模型 POD网络 同一节点上的pod网络 依赖于虚拟网桥/网卡&#xff08;linux虚拟设备&#xff09;pod内容器共享网络栈&#xff08;pause容器创建&#xff09; 不同节点上的pod网络 路由方案&#xff1a;依赖于底层网络设备&#x…

FPGA实现数码管显示分秒时间

目录 一. verilog实现 二. 烧录验证 三. 结果验证 使用开发板&#xff1a;DE2-115开发板 一. verilog实现 要实现分和秒&#xff0c;需要知道定时器的频率&#xff0c;通过查手册可知&#xff0c;我使用的开发板时钟为50hz&#xff0c;也就是时钟一个周期是2微秒。 5000000…

Spring 核心技术解析【纯干货版】- XVI:Spring 网络模块 Spring-WebMvc 模块精讲

在现代 Web 开发中&#xff0c;高效、稳定、可扩展的框架至关重要。Spring WebMvc 作为 Spring Framework 的核心模块之一&#xff0c;为开发人员提供了强大的 MVC 体系支持&#xff0c;使得 Web 应用的构建更加便捷和规范。无论是传统的 JSP 视图渲染&#xff0c;还是基于 RES…

MySQL系统库汇总

目录 简介 performance_schema 作用 分类 简单配置与使用 查看最近执行失败的SQL语句 查看最近的事务执行信息 sys系统库 作用 使用 查看慢SQL语句慢在哪 information_schema 作用 分类 应用 查看索引列的信息 mysql系统库 权限系统表 统计信息表 日志记录…

标题:利用 Rork 打造定制旅游计划应用程序:一步到位的指南

引言&#xff1a; 在数字化时代&#xff0c;旅游计划应用程序已经成为旅行者不可或缺的工具。但开发一个定制的旅游应用可能需要耗费大量时间与精力。好消息是&#xff0c;Rork 提供了一种快捷且智能的解决方案&#xff0c;让你能轻松实现创意。以下是使用 Rork 创建一个定制旅…

GATT(Generic Attribute Profile)是蓝牙低功耗(Bluetooth Low Energy,简称BLE)协议栈中的一个核心协议

蓝牙的 GATT&#xff08;Generic Attribute Profile&#xff09; 是蓝牙低功耗&#xff08;Bluetooth Low Energy&#xff0c;简称BLE&#xff09;协议栈中的一个核心协议&#xff0c;用于定义设备如何通过蓝牙进行数据传输和交互。GATT 是基于 ATT&#xff08;Attribute Proto…

[ deepseek 指令篇章 ]300个领域和赛道喂饭级deepseek指令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

数据结构 -- 图的存储

图的存储 邻接矩阵法 邻接矩阵存储不带权图 0 - 表示两个顶点不邻接 1 - 表示两个顶点邻接 在无向图中&#xff0c;每条边在矩阵中对应两个1 在有向图中&#xff0c;每条边在矩阵中对应一个1 //不带权图的邻接矩阵存储 #define MaxVertexNum 100 //顶点数目的最大值 typed…

25.4.4错题分析

计算机组成原理 总线特点 考察总线特点&#xff0c;串行总线&#xff0c;一次只传1bit&#xff0c;采用单条电缆&#xff0c;抗干扰能力强&#xff0c;传输距离较远&#xff0c;成本低&#xff0c;但传输速度慢&#xff0c;延迟较高&#xff0c;不适用大规模数据传输 并行总线…

规则引擎Drools

1.规则引擎概述 1.1 什么是规则引擎 规则引擎 全称为业务规则管理系统&#xff0c;英文名为BRMS&#xff0c;规则引擎的主要思想是将应用程序中的业务决策部分分离出来&#xff0c;并使用预定义的语义模块编写业务规则&#xff0c;由用户或开发者在需要时进行配置和管理。 需…

框架PasteForm实际开发案例,换个口味显示数据,支持echarts,只需要标记几个特性即可在管理端显示(2)

PasteForm框架的主要思想就是对Dto进行标记特性,然后管理端的页面就会以不一样的UI呈现 使用PasteForm框架开发,让你免去开发管理端的烦恼,你只需要专注于业务端和用户端! 在管理端中,如果说表格是基本的显示方式,那么图表chart就是一个锦上添花的体现! 如果一个项目拥…

【工具】在 Visual Studio 中使用 Dotfuscator 对“C# 类库(DLL)或应用程序(EXE)”进行混淆

在 Visual Studio 中使用 Dotfuscator 进行混淆 Dotfuscator 是 Visual Studio 自带的混淆工具&#xff08;Dotfuscator Community Edition&#xff0c;简称 CE&#xff09;。它可以混淆 C# 类库&#xff08;DLL&#xff09;或应用程序&#xff08;EXE&#xff09;&#xff0c…

线程同步与互斥(上)

上一篇&#xff1a;线程概念与控制https://blog.csdn.net/Small_entreprene/article/details/146704881?sharetypeblogdetail&sharerId146704881&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link我们学习了线程的控制及其相关概念之后&#…

[Linux系统编程]进程信号

进程信号 1. 信号入门1.1 信号基本概念1.2 技术应用角度的信号2. 信号的产生2.1 通过终端按键(如键盘)产生信号2.2 通过异常产生信号2.3 调用系统函数向进程发信号2.4 由软件条件产生信号2.5 总结3. 阻塞信号3.1 信号其他相关常见概念3.2 内核中的信号表示3.3 sigset_t3.3.1 …

要素的选择与转出

1.要素选择的三种方式 当要在已有的数据中选择部分要素时&#xff0c;ArcMap提供了三种方式:按属性选择、位置选择及按图形选择。 1)按属性选择 通过设置 SQL查询表达式&#xff0c;用来选择与选择条件匹配的要素。 (1)单击主菜单下【选择】【按属性选择】&#xff0c;打开【按…

Springboot + Vue + WebSocket + Notification实现消息推送功能

实现功能 基于Springboot与Vue架构&#xff0c;首先使用Websocket实现频道订阅&#xff0c;在实现点对点与群发功能后&#xff0c;在前端调用windows自带的消息通知&#xff0c;实现推送功能。 开发环境 Springboot 2.6.7vue 2.6.11socket-client 1.0.0 准备工作 在 Vue.js…

云手机如何防止设备指纹被篡改

云手机如何防止设备指纹被篡改 云手机作为虚拟化设备&#xff0c;其设备指纹的防篡改能力直接关系到账户安全、反欺诈和隐私保护。以下以亚矩阵云手机为例&#xff0c;讲解云手机防止设备指纹被篡改的核心技术及实现方式&#xff1a; 系统层加固&#xff1a;硬件级安全防护 1…

有人DTU使用MQTT协议控制Modbus协议的下位机-含数据库

本文为备忘录&#xff0c;不做太多解释。 DTU型号&#xff1a;G780 服务器&#xff1a;win2018 一。DTU设置 正确设置波特率&#xff0c;进入配置状态&#xff0c;获取当前参数&#xff0c;修改参数&#xff0c;设置并保存所有参数。 1.通道1设置 2.Modbus轮询设置 二&am…