vue中封装使用svg图片
svg的优点 : 可以无损放大或缩小,支持多种滤镜和效果,易于修改和编辑
封装组件更加方便使用
1、封装SvgIcon组件
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconName" />
</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 scoped>
.svg-icon {
fill: currentColor;
margin-right: 5px;
width: 24px;
height: 24px;
text-align: center;
font-size: 18px;
vertical-align: middle;
}
</style>
2、将组件注册到全局
index.js为svg配置文件,svg下存放svg文件图片
src/icons/index.js内容如下:
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon' // svg组件
// 注册到全局
Vue.component('svg-icon', SvgIcon)
const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('./svg', false, /\.svg$/)
requireAll(req)
3、在main.js中引用
import '@/icons' // svg 图标
4、在组件中使用
icon-class为对应svg的文件名,class为样式名
<svg-icon
style="width: 16"
icon-class="biaozhu"
class="frozen-icon"
/>