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

在 Vue 中动态引入SVG图标的实现方案

使用 svg-sprite-loader(雪碧图方案)

合并所有 SVG 为单个雪碧图,通过 <use> 引用。

安装依赖

npm install svg-sprite-loader --save-dev

配置 vue.config.js

const { defineConfig } = require('@vue/cli-service')
const path = require('path')module.exports = defineConfig({chainWebpack: (config) => {// 默认 SVG 规则排除 icons 目录config.module.rule('svg').exclude.add(path.resolve(__dirname, 'src/assets/svgs')).end();// 添加 svgs 目录专属规则config.module.rule('svgs').test(/\.svg$/).include.add(path.resolve(__dirname, 'src//assets/svgs')).end().use('svg-sprite-loader').loader('svg-sprite-loader').options({ symbolId: 'icon-[name]' }); // symbolId 命名规则}
})

创建全局组件 SvgIcon.vue

<template><svg><use :xlink:href="`#icon-${name}`" x="0" y="0" /></svg>
</template><script>
export default {props: {name: { type: String, required: true },  // SVG 文件名}
};
</script>

在入口文件(如 main.js)自动导入所有 SVG

const req = require.context('@/assets/svgs', false, /\.svg$/);
req.keys().map(req);

组件中使用

<template><div>svg:<SvgIcon name="enter" class="svg-icon" /></div>
</template><script>
import SvgIcon from '@/views/SvgIcon.vue';export default {components: { SvgIcon }
}
</script>
<style lang="scss" scoped>
.svg-icon {width: 40px;height: 40px;fill: currentColor;color: black;&:hover {color: red;}
}
</style>

注意这里设置了 svg 图片 :hover 要想生效必须将 svg 里 fill="rgb" 颜色设为 fill="currentColor" 或是删除这个属性。

也可以注册为全局组件

Vue.component('SvgIcon', SvgIcon)

可以下载一个 svg 图片命名为 enter.svg 放到 assets/svgs 目录下

启动网站

http://www.xdnf.cn/news/17382.html

相关文章:

  • Horse3D引擎研发笔记(三):使用QtOpenGL的Shader编程绘制彩色三角形
  • 第十九天-输入捕获实验
  • Redis面试题及详细答案100道(01-15) --- 基础认知篇
  • synchronized和RentrantLock用哪个?
  • LangChain-Unstructured 基础使用:PDF 与 Markdown 处理解析
  • 深入解析进程创建与终止机制
  • RAG-大模型课程《李宏毅 2025》作业1笔记
  • 算法篇----分治(快排)
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:General Purpose I/O (GPIO)通用输入 / 输出,LED控制亮灭,按键控制,中断控制
  • 【Mac】MLX:Lora微调工作流
  • 疯狂星期四文案网第34天运营日记
  • 第15届蓝桥杯Scratch图形化省赛中级组2024年8月24日真题
  • C++四种类型转换
  • 决策树技术详解:从理论到Python实战
  • 数据标准化与归一化的区别与应用场景
  • UE蓝图节点Add Impulse和Add Torque in Radians
  • Solana上Launchpad混战:新颖性应被重视
  • [激光原理与应用-201]:光学器件 - 增益晶体 - 概述
  • 大语言模型提示工程与应用:LLMs文本生成与数据标注实践
  • Java基础-TCP通信(多发多收和一发一收)
  • PHP-单引号和双引号(通俗易懂讲解版)
  • MySQL 元数据详细说明
  • AI基础与实践专题:神经网络基础
  • 探索Trae:使用Trae CN爬取 Gitbook 电子书
  • Java 8 特性
  • 网络管理实战
  • 【QT】常⽤控件详解(六)多元素控件 QListWidget Table Widget Tree Widget
  • QT第三讲- 机制、宏、类库模块
  • MBR分区nvme固态硬盘安装win7--非UEFI启动和GPT分区
  • ruoyi关闭shiro校验,任何接口可以直接访问