vue项目中使用 SVG 组件
使用 SVG 组件
1. 安装 svg-sprite-loader
npm i -D svg-sprite-loader
2. 新增 SvgIcon 组件
1 <template> 2 <svg class="svg-icon" 3 aria-hidden="true"> 4 <use :xlink:href="iconName" /> 5 </svg> 6 </template> 7 8 <script> 9 export default { 10 name: 'SvgIcon', 11 props: { 12 iconClass: { 13 type: String, 14 required: true 15 } 16 }, 17 computed: { 18 iconName() { 19 return `#icon-${this.iconClass}` 20 } 21 } 22 } 23 </script> 24 25 <style scoped> 26 .svg-icon { 27 width: 1em; 28 height: 1em; 29 vertical-align: -0.15em; 30 fill: currentColor; 31 overflow: hidden; 32 } 33 </style>
3. 在 src 文件夹中创建 icons 文件夹。icons 文件夹中新增 svg 文件夹(用来存放 svg 文件)与 index.js 文件:
1 import SvgIcon from "@/components/SvgIcon"; 2 import Vue from "vue"; 3 4 // 注册到全局 5 Vue.component("svg-icon", SvgIcon); 6 7 const requireAll = requireContext => requireContext.keys().map(requireContext); 8 const req = require.context("./svg", false, /\.svg$/); 9 requireAll(req);
4. 在 main.js 中导入 icons/index.js
1 import "@/icons";
5. 修改 vue.config.js
1 const path = require("path"); 2 const resolve = dir => path.join(__dirname, dir); 3 4 module.exports = { 5 chainWebpack: config => { 6 const svgRule = config.module.rule("svg"); 7 svgRule.uses.clear(); 8 svgRule.exclude.add(/node_modules/); 9 svgRule.include.add(/src\/icon/); 10 svgRule 11 .test(/\.svg$/) 12 .use("svg-sprite-loader") 13 .loader("svg-sprite-loader") 14 .options({ 15 symbolId: "icon-[name]" 16 }); 17 18 const imagesRule = config.module.rule("images"); 19 imagesRule.exclude.add(resolve("src/icons")); 20 config.module.rule("images").test(/\.(png|jpe?g|gif|svg)(\?.*)?$/); 21 } 22 };
6. 在vue文件中使用svg,在icon-class的值修改为svg文件的名字即可
1 <svg-icon icon-class="anquan"/>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了