首先,需要保证项目安装了svg-sprite-loader库,并且在vue.config.js中做了对应的设置。
核心代码是下面两个文件,都存放在SvgIcon文件夹内。index.js为导出代码,在main.js中导入该文件,即可使用。
// main.js
import "@/component/SvgIcon"
使用方法特别简单,直接<svg-icon icon-class="svg文件名">即可。
index.js文件代码
// index.js
/**
* 自定义svg-icon
* 使用说明:
* 1、下载或制作svg文件,存放到/src/assets/icons/svg目录下
* 2、运行 npm run svgo 可压缩精简svg
* 3、Vue文件中使用Demo:<svg-icon icon-class="svg文件名">
*/
import Vue from "vue"
import SvgIcon from "./SvgIcon.vue"
Vue.component('svg-icon', SvgIcon)
const req = require.context('../../assets/icons/svg', false, /\.svg$/);
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)
SvgIcon.vue文件代码
<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,
required: "",
},
},
computed: {
iconName() {
return `#icon-${this.iconClass}`;
},
svgClass() {
if (this.className) return 'svg-icon ' + this.className
else return 'svg-icon'
}
},
};
</script>
<style scoped>
.svg-icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>