vue项目中使用svg图标

1. 下载依赖

npm install svg-sprite-loader --save-dev

2. 在vue.config.js文件下添加以下代码

  chainWebpack: (config) => {
    const svgRule = config.module.rule('svg')
    svgRule.uses.clear()
    svgRule
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]',
        include: ['./src/icons']
      })
  },

在这里插入图片描述

3. 在icons文件下添加两个文件,分别是index.js和SvgIcon.vue

在这里插入图片描述

  • index.js文件内容如下
import Vue from "vue";
import SvgIcon from "./SvgIcon.vue";
Vue.component('svg-icon',SvgIcon)

//require.context 读取指定目录的所有文件
//第一个:目录
//第二个:是否遍历子集目录
//第三个:定义遍历文件规则

const req = require.context('./svg',false,/\.svg$/)//读取结尾为。svg的文件
//es6
const requireAll = requireContext => {
	return requireContext.keys().map(requireContext)
}
requireAll(req)
  • SvgIcon.vue文件内容如下
<template>
    <svg :class="svgClass" aria-hidden="true">
        <use :xlink:href="iconName"></use>
    </svg>
</template>
<script>
import { ref, computed, onMounted } from '@vue/composition-api';
export default {
    name: "svgIcon",
    // props: ['iconClass', 'className'],
    props: {
        // 分页
        iconClass: {
            type: String,  // 定义接收的值类型
            default: ''
        },
        className : {
            type: String,
            default: ''
        }
    },
    setup(props){
        const msg = ref("手把手撸码的说法的前端");
        const number = ref(1);
        // 计算属性,得出最终结果,并返回
        const iconName = computed(() => `#icon-${props.iconClass}`)
        const svgClass = computed(() => {
            if(props.className) {
                return `svg-icon ${props.className}`
            }else{
                return `svg-icon`
            }
        })
        return {
            msg,
            iconName,
            svgClass
        }
    }
}
</script>
<style scoped>
.svg-icon {
    width: 1em;
    height: 1em;
    /* fill: currentColor; */
	/* background-color: #000; */
}
</style>

4. 在main.js中引入svg

在这里插入图片描述

5. 添加svg图片

在这里插入图片描述
在这里插入图片描述

6. 在页面中使用svg图标

	<svg-icon iconClass="视频章节" className="视频章节" />

其中iconClass和className都为svg图标的名称

以下为显示效果
在这里插入图片描述
祝大家成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值