vue项目引入svg图标

1、最开始是要下载包 npm install svg-sprite-loader
2、配置项目的配置文件 vue.config.js

const path = require("path");
function resolve(dir) {
 return path.join(__dirname, dir);
}
module.exports = {
 chainWebpack: config => {
   // set svg-sprite-loader
   // 清除配置
   // 注意:resolve()里面的路径,是要指向自己项目存放svg的文件夹;svg-sprite-loader里面的配置symbolId选项 没有配置的话 默认是文件的名称;
   config.module
     .rule('svg')  //找到svg-loader 
     .exclude.add(resolve('src/components/iconSvg/icons'))  //排除目录
     .end()
   // 添加配置
   config.module
     .rule('icons')
     .test(/\.svg$/)  //正则匹配 格式为 svg
     .include.add(resolve('src/components/iconSvg/icons')) //只对src/icon 目录生效  当前目录指向自己项目svg的文件夹
     .end()
     .use('svg-sprite-loader')  //注入插件svg-sprite-loader
     .loader('svg-sprite-loader')  //添加loader
     .options({    //配置为 icon-文件名
       symbolId: 'icon-[name]'
     })
     .end()
 },
};

3、新建svg的组件

// src/components/iconSvg/index.vue
<template>
 <svg :class="svgClass" aria-hidden="true">
   <use :xlink:href="iconName" :fill="iconColor"/>
 </svg>
</template>

<script>
/**
*   <svg-icon icon-class="set"></svg-icon>
*/
export default {
 name: "SvgIcon",
 props: {
   iconClass: {
     type: String,
     required: true
   },
   className: {
     type: String,
     default: ""
   },
   iconColor: {
     type: String,
     default: ""
   }
 },
 computed: {
   iconName() {
     return `#icon-${this.iconClass}`;  //跟svg-sprite-loader 生成的symbolId相对应上
   },
   svgClass() {
     if (this.className) {
       return "svg-icon " + this.className;  //自定义样式
     } else {
       return "svg-icon"; //默认样式
     }
   }
 },
};
</script>

<style scoped>
.svg-icon {
 width: 16px;
 height: 16px;
 vertical-align: -0.15em;
 fill: currentColor;
 overflow: hidden;
   margin-right: 10px;
}
</style>

4、写svg引入的plugin src/plugins/iconsSvg.js

import iconSvg from "@/components/iconSvg"; // svg组件
 
export default {
  install: (app) => {
    // 注册全局组件
    app.component("iconSvg", iconSvg);
    const requireAll = reqireContext => reqireContext.keys().map(reqireContext);
    const req = require.context("@/components/iconSvg/icons", false, /\.svg$/);
    requireAll(req); //相当于引入components/iconSvg/icons文件下的svg文件
  },
};

5、需要在 入口文件main.js 内引入

import { createApp } from "vue";
import App from "./App.vue";
// 引入自定义的svg icon
import iconsSvg from "@/plugins/iconsSvg.js";
 
const app = createApp(App);
app.use(iconsSvg)

6、页面使用

<icon-svg icon-class="dg" icon-color="#304056"></icon-svg>
 
// icon-class后面接的是相应icon文件夹下面svg的名称
  • 注意:如果你使用的是vue2.0的话需要注意的是第四步第五步,
  • 可以通过第四步引入vue进行全局注册,第五步只要引入相应的js就行,不用use
//第四步
import iconSvg from "@/components/iconSvg"; // svg组件
import vue from "vue";
// 注册全局组件
vue.component("iconSvg", iconSvg);
const requireAll = reqireContext => reqireContext.keys().map(reqireContext);
const req = require.context("@/components/iconSvg/icons", false, /\.svg$/);
requireAll(req); //相当于引入components/iconSvg/icons文件下的svg文件
 
//第五步
import "@/plugins/iconsSvg.js";
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你说的誓言°变失言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值