vue3中使用svg

1.安裝依賴(lài)

npm install vite-plugin-svg-icons -D
# 或
yarn add vite-plugin-sprite-loader -D   

2.配置 vite.config.ts

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
import path from 'path';

export default defineConfig({
  plugins: [
    vue(),
    createSvgIconsPlugin({
      // 指定 SVG 圖標(biāo)存放目錄(通常放在 `src/assets/icons`)
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
      // 定義 symbolId 格式(與組件中的引用方式對(duì)應(yīng))
      symbolId: 'icon-[name]',
      // 可選:自動(dòng)注入 SVG 雪碧圖到 HTML
      inject: 'body-last',
      // 可選:自定義 DOM ID
      customDomId: '__svg__icons__dom__'
    })
  ]
});

3.創(chuàng)建文件夾icons,存放svg文件

根據(jù)配置的路徑src/assets/icons創(chuàng)建icons文件夾

4.封裝 SvgIcon 組件

<template>
  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="`#icon-${name}`" />
  </svg>
</template>

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

export default defineComponent({
  name: 'SvgIcon',
  props: {
    name: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    }
  },
  setup(props) {
    const svgClass = computed(() => {
      return props.className ? `svg-icon ${props.className}` : 'svg-icon';
    });

    return { svgClass };
  }
});
</script>

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

5. 全局注冊(cè)組件

import { createApp } from 'vue';
import App from './App.vue';
import SvgIcon from '@/components/SvgIcon.vue';
import 'virtual:svg-icons-register';  // 確保 SVG 目錄下的所有文件被自動(dòng)引入
const app = createApp(App);
app.component('SvgIcon', SvgIcon);
app.mount('#app');

6.使用

  <SvgIcon name="home" class="custom-class" />
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容