当前位置: 代码迷 >> 综合 >> vue项目中使用svg sprite(2020-10-27笔记)
  详细解决方案

vue项目中使用svg sprite(2020-10-27笔记)

热度:1   发布时间:2024-03-08 21:32:24.0

1、安装svg-sprite-loader

npm i svg-sprite-loader

2、webpack配置(vue-cli2)(build/webpack.base.conf.js)

使用 webpack 的 exclude 和 include
在这里插入图片描述

{test: /\.svg$/,loader: 'svg-sprite-loader',include: [resolve('src/icons')],options: {symbolId: 'icon-[name]'  //指定symbolId,不指定则默认为svg文件名}}{test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,loader: 'url-loader',exclude: [resolve('src/icons')],//不需要使用改loader处理icon,让svg-sprite-loader来处理options: {limit: 10000,name: utils.assetsPath('img/[name].[hash:7].[ext]')}}, 

3、创建icon组件

在这里插入图片描述

<template><svg :class="svgClass"aria-hidden="true"><use :xlink:href="iconName"></use></svg>
</template>
<script>
export default {name: 'SvgIcon',props: {iconClass: {type: String,required: true},className: {type: String,default: ''}},computed: {iconName () {return `#icon-${this.iconClass}`},svgClass () {if (this.className) {return 'svg-icon ' + this.className} else {return 'svg-icon'}}}
}
</script>
<style>
.svg-icon {width: 1em;height: 1em;vertical-align: -0.15em;fill: currentColor;overflow: hidden;
}
</style>

4、创建icons文件夹存放svg,同时注册组件

在这里插入图片描述
index.js代码如下:

import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon' //引入svg组件
Vue.component('svg-icon', SvgIcon) //全局注册svg-icon
const req = require.context('./svg', false, /\.svg$/)//遍历require.context的返回模块并导入
const requireAll = requireContext => requireContext.keys().map(requireContext)//import所有符合条件的svg 三个参数:文件夹、是否使用子文件夹、正则
requireAll(req)

5、在页面中使用

(1)在main.js中引入

import './icons'

(2)在页面直接使用svg-icon组件

<svg-icon icon-class="youzi"></svg-icon>