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"/>

 

posted @   shine_lovely  阅读(1592)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示