当前位置: 首页 > 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.dtcms.com/a/322888.html

相关文章:

  • spring声明式事务未提交引发的线上问题
  • Vue 3 + TypeScript:深入理解组件引用类型
  • 2025年渗透测试面试题总结-09(题目+回答)
  • 【自动化运维神器Ansible】playbook实践示例:HTTPD安装与卸载全流程解析
  • Blender 快捷键速查表 (Cheat Sheet)
  • 推荐系统学习笔记(十)多目标排序模型
  • “戴着镣铐”的AI推理:中国如何打破算力枷锁,赢得“最后一公里”?
  • Nvidia 开源 KO 驱动学习配置入门
  • 基于51单片机温湿度检测系统无线蓝牙APP上传设计
  • 化工安防误报率↓82%!陌讯多模态融合算法实战解析
  • 【前端八股文面试题】DOM常⻅的操作有哪些?
  • 深入理解对话状态管理:多轮交互中的上下文保持与API最佳实践
  • Linux 中CentOS Stream 8 - yum -y update 异常报错问题
  • 【LLM】Openai之gpt-oss模型和GPT5模型
  • PNPM总结
  • 【SQL进阶】用EXPLAIN看透SQL执行计划:从“盲写“到“精准优化“
  • 如何解决 Vue 项目启动时出现的 “No such module: http_parser” 错误问题
  • AI 边缘计算网关:开启智能新时代的钥匙
  • 爬虫攻防战:反爬与反反爬全解析
  • Node.js特训专栏-实战进阶:22. Docker容器化部署
  • 基于 InfluxDB 的服务器性能监控系统实战(一)
  • 大语言模型提示工程与应用:提示工程-提升模型准确性与减少偏见的方法
  • 【线性代数】线性方程组与矩阵——行列式
  • 强化学习-MATLAB
  • STM32的中断系统
  • 数据分析框架从 “工具堆砌” 转向 “智能协同”
  • java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案
  • PAT 1052 Linked List Sorting
  • 第16届蓝桥杯Scratch选拔赛初级及中级(STEMA)2024年10月20日真题
  • 求和算法的向后稳定性 backward stable