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

在 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.lryc.cn/news/615353.html

相关文章:

  • STM32 外设驱动模块四:光敏电阻(LDR) 模块
  • 後端開發技術教學(四) 數據交互延伸
  • 2025年渗透测试面试题总结-09(题目+回答)
  • 力扣(轮转数组)
  • 欧拉公式的意义
  • gpt-oss 全量技术解读
  • AI鉴伪技术:守护数字时代的真实性防线
  • 数学学习 | 高数、线代、概率论及数理统计荐书
  • 【C++】set
  • AI热点周报(8.3~8.9):OpenAI重返开源,Anthropic放大招,Claude4.1、GPT5相继发布
  • 第二十八天(cookiesessiontokeny验证)
  • 李宏毅深度学习教程 第16-18章 终身学习+网络压缩+可解释性人工智能
  • STM32学习笔记6-TIM-2输出比较功能
  • 《汇编语言:基于X86处理器》第12章 复习题和练习
  • [每周一更]-(第155期):深入Go反射机制:架构师视角下的动态力量与工程智慧
  • 元宇宙技术如何改变社交方式?
  • (第三篇)spring cloud之Zookeeper注册中心
  • Go 实用指南:如何执行 Skyline 查询(Pareto 最优点筛选)
  • 图片拆分工具,自定义宫格切割
  • 在Spring Boot项目中如何动态切换数据源、数据库?
  • java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案
  • 【Git】Visual Studio 实现合并分支
  • Alibaba Cloud Linux 3 安装 git
  • DigitalProductId解密算法php调试版piddebug.php
  • n8n飞书webhook配置(飞书机器人、飞书bot、feishu bot)Crypto节点、js timestamp代码、Crypto node
  • AG32cpld实现一个UartTx“外设”
  • Kafka服务端NIO操作原理解析(二)
  • Arm Development Studio 安全通告:CVE-2025-7427
  • 人脸情绪检测数据集-9,400 张图片 智能客服系统 在线教育平台 心理健康监测 人机交互优化 市场研究与广告 安全监控系统
  • 【面试题】cookie和session 的区别