Vue3 封装 element-plus 图标选择器

一、实现效果

二、实现步骤

2.1. 全局注册 icon 组件

// main.ts
import App from './App.vue';
import { createApp } from 'vue';
import * as ElementPlusIconsVue from '@element-plus/icons-vue'const app = createApp(App);// 全局挂载和注册 element-plus 的所有 icon
app.config.globalProperties.$icons = []
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.config.globalProperties.$icons.push(key)app.component(key, component)
}app.mount('#app');

2.2. 组件实现

<script setup lang="ts">
import { ComponentInternalInstance, defineEmits, defineProps, getCurrentInstance } from 'vue'const { appContext: {app: { config: { globalProperties } } } } = getCurrentInstance() as ComponentInternalInstanceinterface Props {modelValue: string
}
const props = defineProps<Props>()const emits = defineEmits(['update:modelValue'])
</script><template><el-popover trigger="focus" :width="256"><template #reference><el-button :icon="modelValue">{{ modelValue }}</el-button></template><div class="el-icon-picker"><component v-for="icon in globalProperties.$icons" :key="icon":class="[icon, 'icon', { 'icon-active': icon == modelValue }]":is="icon"@click="emits('update:modelValue', icon)"></component></div></el-popover>
</template><style scoped>
.el-icon-picker {height: 256px;overflow-y: scroll;display: flex;justify-content: space-around;flex-wrap: wrap;
}.icon {display: inline-block;width: 24px;height: 24px;color: var(--el-text-color-regular);font-size: 20px;border-radius: 4px;cursor: pointer;text-align: center;line-height: 45px;margin: 5px;
}.icon:hover {color: var(--el-color-primary);
}.icon-active {color: var(--el-color-primary);
}
</style>

2.3. 使用

<script setup lang="ts">
import { ref } from 'vue';
import ElIconPicker from './components/el-icon-picker.vue';const icon = ref<string>('');
</script><template><el-form><el-form-item label="图标"><ElIconPicker v-model="icon"></ElIconPicker></el-form-item></el-form>
</template>

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

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

相关文章

WebGL 选中物体

目录 前言 如何实现选中物体 示例程序&#xff08;PickObject.js&#xff09; 代码详解 gl.readPixels&#xff08;&#xff09;函数规范 示例效果 前言 有些三维应用程序需要允许用户能够交互地操纵三维物体&#xff0c;要这样做首先就得允许用户选中某个物体。对物体…

大模型存在“反转诅咒”现象,无法处理反向问题;Langchain课程资源

&#x1f989; AI新闻 &#x1f680; 大模型存在“反转诅咒”现象&#xff0c;无法处理反向问题 摘要&#xff1a;最新研究发现&#xff0c;大语言模型存在“反转诅咒”现象&#xff0c;即明知道“A 是 B”&#xff0c;却答不出“B 是 A”。研究人员进行了两项实验&#xff0…

php万能表单系统源码 支持自定义+收费表单活动报名 适合多行业

在众多的表单系统中&#xff0c;PHP万能表单系统因其灵活性和可扩展性备受开发者的青睐。PHP万能表单系统是一款基于PHP语言的表单生成器&#xff0c;它可以帮助开发者快速生成各种类型的表单&#xff0c;如注册、登录、留言等。下面给大家分享一款php万能表单系统源码&#xf…

【详细图文】Windows下安装RustRover和配置Rust环境

前言 Rust已经火了挺长时间了&#xff0c;连微软的Windows内核都用它来重新改写&#xff0c;可想而知其厉害之处。之前有看过Rust的教程&#xff0c;但一直没有去尝试。今天看到JetBrains出了Rust 专用的IDE&#xff1a;RustRover。作为JetBrains的粉丝&#xff0c;决定进行一…

Linux环境下使用SVN快速访问资料库?试试使用cpolar端口映射

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

Kotlin | 在for、forEach循环中正确的使用break、continue

文章目录 for循环中使用break、continueLabel标签forEach中模拟break、continue资料 Kotlin 有三种结构化跳转表达式&#xff1a; return&#xff1a;默认从最直接包围它的函数或者匿名函数返回。break&#xff1a;终止最直接包围它的循环。continue&#xff1a;继续下一次最直…

git 常用命令分享

git官网地址&#xff1a;https://git-scm.com/ 1.设置用户名 邮箱 设置用户名: git config --global user.name “name” 设置邮箱&#xff1a; git config --global user.email "email" 2.查看设置的信息 git config --list 以上设置的信息在用户目录下&#xff1…

lazada商品详情数据接口,支持多个国家站点

Lazada商品详情数据接口是一个RESTful风格的接口&#xff0c;通过HTTP协议来访问和操作资源。 Lazada商品详情API接口的使用方法如下&#xff1a; 获取Lazada平台上指定商品的详细信息&#xff0c;包括商品名称、价格、库存、分类、描述、图片等。支持通过商品ID、SKU、Selle…

有效的括号(栈的高频面试题)

一、题目描述 题目连接&#xff1a;有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺…

Generative AI 新世界 | 扩散模型原理的代码实践之采样篇

在上一期的文章中&#xff0c;探讨了在 Amazon SageMaker Studio 上使用 QLoRA 等量化技术微调 Falcon 40B 大语言模型。而从本期开始&#xff0c;我们将一起尝试在更深的知识维度&#xff0c;继续探究生成式 AI 这一火热的新知识领域。 亚马逊云科技开发者社区为开发者们提供全…

工作薄代码之将活动工作表复制到新工作簿等

【分享成果&#xff0c;随喜正能量】得失&#xff0c;可以说是人类事业上的考验&#xff0c;不要因一时的得失影响一生的期许。得失是一时的&#xff0c;理想是一生的。。 我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xf…

定时器之输出捕获

简介 • IC &#xff08; Input Capture &#xff09;输入捕获 • 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前 CNT 的值将被锁存到 CCR 中&#xff0c;可用于测量 PWM 波形的频率、占空比、脉冲间隔、电平持续时间等参数 • 每个高级定时器和…

多线程进阶:Callable和JUC的常见类

Callable 这是一个接口&#xff0c;类似于Runnable。 Runnable用来描述一个任务&#xff0c;描述的任务没有返回值。 Callable也是用来描述一个任务&#xff0c;描述的任务是有返回值的。 如果需要使用一个线程单独的计算出某个结果来&#xff0c;此时用Callable是比较合适…

【好玩的开源项目】Windows 12网页版的部署与使用体验

【好玩的开源项目】Windows 12网页版的部署与使用体验 一、Windows 12网页版介绍1.1 Windows 12网页版简介1.2 项目地址 二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍 三、安装httpd软件3.1 检查yum仓库3.2 安装httpd软件3.3 启动httpd服务3.4 查看httpd服务3.5 防火墙和…

springboot+canal+mysql+redis缓存双写一致性

canal官网地址&#xff1a;https://github.com/alibaba/canal/wiki/QuickStart 基本上按照官网的步骤来就行 准备 首先服务器上要安装好jdk&#xff0c;因为canal运行需要jdk,同时把canal对应的端口在服务中开放&#xff0c;否则连接不上 对于自建 MySQL , 需要先开启 Binl…

QT-day5

1、添加注册功能到数据库 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMessageBox> //消息对话框类头文件 #include <QDebug> #include <QPushButton> #include <QSqlDatabase> //数据库管理类 #include…

ChatGPT详细搭建教程+支持AI绘画

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&#x…

SpringBoot 之配置加密

Jasypt库的使用 Jasypt是一个Java简易加密库&#xff0c;用于加密配置文件中的敏感信息&#xff0c;如数据库密码。 Jasypt库与springboot集成&#xff0c;在实际开发中非常方便。 1、引入依赖 <dependency><groupId>com.github.ulisesbocchio</groupId>&…

构建工具Webpack简介

一、构建工具 当我们习惯了Node中使用ES模块化编写代码以后&#xff0c;用原生的HTML、CSS、JS这些东西会感觉到各种不便。比如&#xff1a;不能放心的使用模块化规范&#xff08;浏览器兼容性问题&#xff09;、即使可以使用模块化规范也会面临模块过多时的加载问题。 这时候…

当当网商品详情数据接口

当当网商品详情数据接口可以通过当当网的开放平台获取相关信息。您可以注册当当开放平台账号&#xff0c;并按照要求提交申请获取API接口的调用凭证。获得授权后&#xff0c;您将会收到一组AccessKey和SecretKey。使用编程语言&#xff08;如Java&#xff09;调用API接口&#…