Vue3 封装 element-plus 图标选择器

news2024/11/24 0:16:36

一、实现效果

二、实现步骤

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 ComponentInternalInstance

interface 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.coloradmin.cn/o/1020906.html

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

相关文章

Android平台下奔溃Crash和无响应ANR日志抓取分析

一、使用AndroidStudio 在logcat中查看实时日志&#xff0c;需要选择连接的手机和应用包名 AS下载链接 二、使用adb shell dumpsys dropbox命令获取 #!/bin/bash # path"/data/system/dropbox" # 在手机这个目录下存储了崩溃日志 newest_time$(adb shell dumps…

JK405R-SOP16录音芯片ic方案的测试板使用说明以及咪头如何选择

目录 2.1芯片硬件说明 注意事项 1、供电最高5.2V&#xff0c;最低2.6V。芯片的11脚是唯一的电源输入&#xff0c;供电电压越低扬声器声音越小 2、注意音频地和数字地要在供电的入口处短接 3、USB引脚一定要留出测试&#xff0c;也可以升级固件 4、10脚为芯片输出的3.3V&am…

旭雅阁私人博物馆 钱币博物馆

一、旭雅阁博物馆简介 旭雅阁博物馆&#xff0c;成立于2018年&#xff0c;是一家以古钱币、老钱币、字画等为主的专题博物馆&#xff0c;主要从事钱币的收藏、研究和展示&#xff0c;肩负有指导和推动钱币收藏、研究及宣传钱币文化的任务。旭雅阁博物馆&#xff0c;坐落于湖南…

个人博客网站一揽子:Docker建站(Nginx、Wordpress、MySql)

前言 既然安装了Docker&#xff0c;那就不妨建立一个自己的博客网站。实现内外网隔离网站部署&#xff0c;更安全。 1.创建Docker子网络 首先创建一个Docker虚拟子网&#xff1a; sudo docker network create wpnt检查是否建立成功&#xff1a; sudo docker network ls最后…

PyTorch实战:实现MNIST手写数字识别

前言 PyTorch可以说是三大主流框架中最适合初学者学习的了&#xff0c;相较于其他主流框架&#xff0c;PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是&#xff0c;框架可以类比为编程语言&#xff0c;仅为我们实现项目效果的工具&#xff0c;也就是我们…

AI绘图提示词Stable Diffusion Prompt 笔记

基础 提示词分为正向提示词&#xff08;positive prompt&#xff09;和反向提示词&#xff08;negative prompt&#xff09;&#xff0c;用来告诉AI哪些需要&#xff0c;哪些不需要词缀的权重默认值都是1&#xff0c;从左到右依次减弱&#xff0c;权重会影响画面生成结果。AI …

登录认证方式汇总,例如ThreadLocal+拦截器+Redis、JWT

登录方式汇总 先讲讲传统的登录方式 1.Cookie方案 用cookie作为媒介存放用户凭证。 用户登录系统之后&#xff0c;会返回一个加密的cookie&#xff0c;当用户访问子应用的时候会带上这个cookie&#xff0c;授权以解密cookie并进行校验&#xff0c;校验通过后即可登录当前用…

基于Java的高校竞赛管理系统设计与实现(亮点:发起比赛、报名、审核、评委打分、获奖排名,可随意更换主题如蓝桥杯、ACM、王者荣耀、吃鸡等竞赛)

高校竞赛管理系统 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述4.2 系统角色 五、系统…

linux常用命令(1):zip/unzip命令(压缩文件/解压缩文件)

文章目录 前言一、linux安装zip文件二、zip语法2.1、常用选项实例2.1.1、-r &#xff08;压缩文件夹&#xff0c;解决80%的场景&#xff09;2.1.2、-q2.1.3、-d&#xff08;从压缩文件中删除指定文件&#xff09;2.1.4、-u&#xff08;更新文件&#xff09;2.1.5、-f2.1.6、-m2…

leetcode1797. 设计一个验证系统(java)

设计一个验证系统 题目描述哈希表题目描述 题目描述 难度 - 中等 leetcode1797. 设计一个验证系统 你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新…

XGBoost算法讲解和公式推导

本文节选自《机器学习入门基础&#xff08;微课版&#xff09;》 10.5 XGBoost 算法 XGBoost 是 2014 年 2 月由华盛顿大学的博士生陈天奇发明的基于梯度提升算法(GBDT)的机器学习算法&#xff0c;其算法不但具有优良的学习效果&#xff0c;而且训练速度高效&#xff0c;在数据…

Linux下的系统编程——线程同步(十三)

前言&#xff1a; 在多线程编程中&#xff0c;如果多个线程同时访问和修改共享资源&#xff0c;可能会产生竞争条件和数据不一致的问题。同步机制用于协调线程之间的访问和操作&#xff0c;确保数据的正确性和一致性。为了避免多个线程同时访问和操作共享资源导致的问题&#…

小程序键盘没有【小数点】输入

<input v-model"formData.number" :auto-height"true" placeholder"请输入" confirm-type"done" type"digit" maxlength"11" input"inputNumber" />number&#xff1a;数字键盘&#xff08;没有小…

Minitab Express for Mac(数据分析软件)附破解补丁 v1.5.0 支持M1

Minitab Express是一款专为Mac用户设计的数据分析和统计软件。它提供了一套全面的工具和功能&#xff0c;用于分析数据、执行统计计算和生成可视化。 下载&#xff1a;Minitab Express for Mac(数据分析软件)附破解补丁 以下是 Minitab Express for Mac 的一些主要功能&#x…

随机森林案例分析

阅读随机森林模型前&#xff0c;建议首先阅读决策树模型手册&#xff08;点击后跳到决策树模型的帮助手册页面&#xff09;&#xff0c;因为随机森林模型实质上是多个决策树模型的综合&#xff0c;决策树模型只构建一棵分类树&#xff0c;但是随机森林模型构建非常多棵决策树&a…

数字虚拟人制作简明指南

如何在线创建虚拟人&#xff1f; 虚拟人&#xff0c;也称为数字化身、虚拟助理或虚拟代理&#xff0c;是一种可以通过各种在线平台与用户进行逼真交互的人工智能人。 在线创建虚拟人变得越来越流行&#xff0c;因为它为个人和企业带来了许多好处。 推荐&#xff1a;用 NSDT编辑…

阿里云无影云电脑和传统PC有什么区别?

阿里云无影云电脑和传统电脑PC有什么区别&#xff1f;区别大了&#xff0c;无影云电脑是云端的桌面服务&#xff0c;传统PC是本地的硬件计算机&#xff0c;无影云电脑的数据是保存在云端&#xff0c;本地传统PC的数据是保存在本地客户端&#xff0c;阿里云百科分享阿里云无影云…

低代码与低代码平台

随着数字化转型和软件需求的不断增长&#xff0c;传统的手写代码开发方式已经无法满足迅速推出应用程序的需求。为了加快软件开发的速度并降低技术门槛&#xff0c;低代码开发模式应运而生。本文将介绍低代码的概念&#xff0c;探讨什么是低代码、什么是低代码平台&#xff1f;…

RFID设备在自动化堆场中的管理应用

随着信息技术的高速发展&#xff0c;带动了港口生产和管理技术的长足进步&#xff0c;港口堆场内的自动化场桥的智能化水平成为码头提高生产率一个重要标签。各地海关着力于现代化科技手段&#xff0c;努力构筑新型的便捷通关模式&#xff0c;在进出口环节做好管理和服务。 全…

已解决 Kotlin Error: Type mismatch: inferred type is String but Int was expected

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…