侧边栏壁纸
博主头像
iffyoO

一时的选择

  • 累计撰写 9 篇文章
  • 累计创建 7 个标签
  • 累计收到 1 条评论

vue3项目引入svg图标

iffyoO
2023-09-21 / 0 评论 / 2 点赞 / 335 阅读 / 455 字
温馨提示:
本文最后更新于 2024-01-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

效果图

image

1、安装svg依赖

在vue中首先需要安装可以加载svg的依赖。
yarn安装:

yarn add svg-sprite-loader --save

2、创建文件夹存放svg图标

在assets文件夹下创建icons文件夹,在icons文件夹下创建svg文件夹存放本地svg图标。
image-1695294443914

3、vue.config.js 中配置svg图片

image-1695294549386
vue.config.js代码:

const path = require('path')

function resolve(dir) {
  return path.join(__dirname, dir)
}

module.exports = defineConfig({
  transpileDependencies: true,
  chainWebpack: config => {
    // svg图标加载
    config.module
      .rule('svg')
      .exclude.add(resolve('src/assets/icons/svg'))
      .end()

    config.module
      .rule('icons')// 定义一个名叫 icons 的规则
      .test(/\.svg$/)// 设置 icons 的匹配正则
      .include.add(resolve('src/assets/icons/svg'))// 设置当前规则的作用目录,只在当前目录下才执行当前规则
      .end()
      .use('svg-sprite')// 指定一个名叫 svg-sprite 的 loader 配置
      .loader('svg-sprite-loader')// 该配置使用 svg-sprite-loader 作为处理 loader
      .options({// 该 svg-sprite-loader 的配置
        symbolId: 'icon-[name]'
      })
      .end()
  }
}

4、创建index.js导入所有svg图标

icons文件夹创建index.js自动导入所有svg图标。
image-1695294771125
icons/index.js代码:

import SvgIcon from '@/components/SvgIcon/SvgIcon'

const svgRequired = require.context('@/assets/icons/svg',false,/\.svg$/)
svgRequired.keys().forEach((item) => svgRequired(item))

export default (app) => {
    app.component('svg-icon', SvgIcon)
}

5、main.js中引入icons/index.js

image-1695294936692

6、创建SvgIcon公用组件

image-1695295039066
SvgIcon/index.vue代码:

<template>
   <svg class="svg-icon" aria-hidden="true">
        <use :xlink:href="iconName"></use>
   </svg>
</template>

<script setup>
import { defineProps, computed } from 'vue';
const props = defineProps({
    icon: {
        type: String,
        required: true
    }
})

const iconName = computed(() => {
    return `#icon-${props.icon}`
})
</script>

<style lang="less" scoped>
.svg-icon {
    width: 1em;;
    height: 1em;
    vertical-align: -0.15em;
    fill: currentColor;
    overflow: hidden;
}
</style>

7、使用SvgIcon组件

image-1695295317180
效果图:
image-1695295340237

2

评论区