vue3项目 svg 自定义 :菜单栏图标显示

ops/2024/12/26 4:37:22/

一、 相关配置

  1. 引入依赖
npm install vite-plugin-svg-icons -D^C
  1. 配置vite.config.js
主要内容: createSvgIconsPlugin
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// 1. 使用@符代替 ./src  下载依赖: npm install path  npm i @types/node -D
import path,{ resolve } from 'path';
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'// https://vite.dev/config/
export default defineConfig({plugins: [vue(),// 注册所有的svg文件生成svg雪碧图createSvgIconsPlugin({iconDirs: [path.resolve(__dirname, 'src/icons/svg')], // 指定存放 SVG 的文件夹symbolId: "icon-[name]", // 设置 Symbol 的 ID 规则})],// 1.使用@符代替 ./srcresolve: {alias: {'@': resolve(__dirname, './src'),}
},
})
  1. main.ts中引入
import "virtual:svg-icons-register";

注意:如果报错没有 fast-glob包, 安装命令 npm install fast-glob -D

二、 item.vue 组件:显示菜单icon+title

<template><!-- Render the icon if it's provided --><svg-icon v-if="props.icon" :icon-class="props.icon" class="sub-el-icon"/><!-- Render the title if it's provided --><span v-if="props.title">{{ props.title }}</span>
</template>
<script setup lang="ts">import { defineProps } from 'vue'import SvgIcon from '@/components/SvgIcon/index.vue'const props = defineProps({icon: {type: String,default: ''},title: {type: String,default: ''}})console.log(props.icon)
</script><style scoped>.sub-el-icon {color: currentColor;width: 1em;height: 1em;}
</style>

三、 SvgIcon.vue :图标组件

<template><svg :class="svgClass" aria-hidden="true"><use :xlink:href="`#icon-${props.iconClass}`"></use></svg>
</template>
<script setup>
import { defineProps } from 'vue'
const props = defineProps({iconClass: {type: String,default: ''},className: {type: String,default: ''}
})
const svgClass = `svg-icon ${props.className}`
</script>
<style lang="scss" scoped>
.svg-icon {width: 1em;height: 1em;vertical-align: -0.15em;fill: currentColor;overflow: hidden;
}
</style>

四、icon信息存储文件

src/
├── components/
│ └── SvgIcon/
│ └── index.vue # SvgIcon 组件
├── icons/
│ ├── index.js # 注册逻辑
│ └── svg/ # 存放所有 SVG 文件
│ ├── home.svg
│ ├── user.svg
│ └── …
index.js

import SvgIcon from '@/components/SvgIcon/index.vue'export default function registerSvgIcon(app) {app.component('svg-icon', SvgIcon)// 动态引入所有 svg 文件const modules = import.meta.glob('./svg/*.svg', { eager: true });// 遍历加载所有模块Object.keys(modules);
}

五、在main.ts中引入

// icon
import registerSvgIcons  from '@/icons/index'
// 注册SVG图标
registerSvgIcons(app)

http://www.ppmy.cn/ops/145031.html

相关文章

【漫话机器学习系列】014.贝叶斯法则(Bayes Theorem)

贝叶斯法则&#xff08;Bayes Theorem&#xff09; 贝叶斯法则是概率论中的一个基本定理&#xff0c;用于描述已知一个事件的条件概率如何更新另一个事件的概率。它是贝叶斯统计的核心&#xff0c;用于从数据中推断未知量。 贝叶斯法则的数学表达式为&#xff1a; 符号解释 …

探索 JSP 基础语法:构建动态网页的基石

在 Java Web 开发的广阔天地中&#xff0c;JSP&#xff08;Java Server Pages&#xff09;技术占据着独特而重要的地位。它宛如一座桥梁&#xff0c;将 Java 语言的强大功能与 HTML 页面的展示能力紧密相连&#xff0c;为创建动态、交互性强的 web 应用程序提供了有力支持。 H…

Ingress-Nginx Annotations 指南:配置要点全方面解读(下)

文章目录 1.HTTP2 Push Preload2.Server Alias3.Server snippet4.Client Body Buffer Size5.External Authentication6.Global External Authentication7.Rate Limiting8.Global Rate Limiting9.Permanent Redirect10.Permanent Redirect Code11.Temporal Redirect12.SSL Passt…

ASP.NET |日常开发中定时任务详解

ASP.NET &#xff5c;日常开发中定时任务详解 前言一、定时任务的概念与用途1.1 定义1.2 应用场景 二、在ASP.NET中实现定时任务的方式2.1 使用System.Timers.Timer2.2 使用Quartz.NET 三、定时任务的部署与管理3.1 部署考虑因素3.2 管理与监控 结束语优质源码分享 ASP.NET &am…

Redis分布式锁释放锁是否必须用lua脚本?

无lua脚本释放锁&#xff1a; public void unlock(String key, String uniqueValue) {String value redisDao.getString(key);if (value ! null && value.equals(uniqueValue))redisDao.delete(key); }使用lua脚本释放锁&#xff1a; // LUA脚本 -> 分布式锁解锁原…

【Redis】缓存

什么是缓存 https://tech.meituan.com/2017/03/17/cache-about.html Spring Data Redis Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能。 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>sp…

亚洲媒体发稿如何抓住关键词提升排名-华媒舍

在如今数字经济时代&#xff0c;亚洲地区新闻发稿推广已成为企业宣传策划的重要途径。在众媒介平台中提高宣传稿件的排名并非易事。其中一个主要因素是怎样把握住关键词&#xff0c;以提高文章中的百度搜索引擎排名。下面我们就为大家介绍亚洲地区新闻发稿推广中怎么灵活运用关…

List 集合安全操作指南:避免 ConcurrentModificationException 与提升性能

一、前言 在开发过程中&#xff0c;我们常常需要在集合中遍历元素进行一些操作。Java 中的集合框架提供了丰富的接口和工具&#xff0c;可以简化我们对集合的操作。然而&#xff0c;随着代码逻辑变得复杂&#xff0c;特别是在进行元素的删除或添加操作时&#xff0c;问题可能会…