vue3.0中使用SvgIcon

由于vite不兼容require,导致vue2版本svg-sprite-loader插件失效,所以需要更换新的插件vite-plugin-svg-icons

安装

npm install vite-plugin-svg-icons --save-dev

配置 vite.config.ts

import viteSvgIcons from 'vite-plugin-svg-icons'
import path from 'path'
export default ({ mode }) => {
  const config = {
    plugins: [
      viteSvgIcons({
        iconDirs: [path.resolve(process.cwd(), 'src/icons')], 
        symbolId: 'icon-[dir]-[name]',
      }),
    ],
  }
  return config
}

src/icons 为svg 存放路径,可自行设置。

设置文件存放路径

在这里插入图片描述

main.ts 全局引入并注册组件

import 'vite-plugin-svg-icons/register';
import SvgIcon from './components/SvgIcon/index.vue'

const app = createApp(App)
app.component('SvgIcon', SvgIcon)

SvgIcon组件代码

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

<script lang="ts">
  import { defineComponent } from 'vue'

  export default defineComponent({
    name: 'SvgIcon',
    props: {
      iconClass: {
        type: String,
        required: true,
      },
      className: {
        type: String,
        default: '',
      },
    },
    computed: {
      iconName(): string {
        return `#icon-${this.iconClass}`
      },
      svgClass(): string {
        if (this.className) {
          return 'svg-icon ' + this.className
        } else {
          return 'svg-icon'
        }
      },
      styleExternalIcon(): {
        mask: string
        '-webkit-mask': string
      } {
        return {
          mask: `url(${this.iconClass}) no-repeat 50% 50%`,
          '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`,
        }
      },
    },
  })
</script>

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

使用方法

和以前一样没有变化

<template>
  <div class="main-container">
    <svg-icon icon-class="list" />
  </div>
</template>

<script lang="ts">
  import { defineComponent } from 'vue'
  export default defineComponent({
    name: 'Home',
    setup() {
      return {}
    },
  })
</script>

版权声明:本文为CSDN博主「菜鸡前端一枚」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45952652/article/details/116449330

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值