Heim >Web-Frontend >View.js >Eine ausführliche Analyse der Verwendung von SVG-Symbolen in vue3+vite

Eine ausführliche Analyse der Verwendung von SVG-Symbolen in vue3+vite

青灯夜游
青灯夜游Original
2022-04-28 10:48:446181Durchsuche

SVG-Bilder werden häufig in Projekten verwendet. In diesem Artikel wird die Verwendung von SVG-Symbolen in vue3 + vite vorgestellt. Ich hoffe, dass er für alle hilfreich ist.

Eine ausführliche Analyse der Verwendung von SVG-Symbolen in vue3+vite

vite-plugin-svg-icons

  • Vorladen Generieren Sie alle Symbole, wenn das Projekt läuft, Sie müssen den Dom nur einmal bedienen
  • Hohe Leistung Integrierter Cache, nur wenn das Datei wird geändert. Erst dann wird sie neu generiert. =2.0.0
  • yarn add vite-plugin-svg-icons -D
    # or
    npm i vite-plugin-svg-icons -D
    # or
    pnpm install vite-plugin-svg-icons -D

Verwenden Sie das Konfigurations-Plugin

import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'

export default () => {
  return {
    plugins: [
      createSvgIconsPlugin({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(process.cwd(), 'src/icons')],
        // 指定symbolId格式
        symbolId: 'icon-[dir]-[name]',

        /**
         * 自定义插入位置
         * @default: body-last
         */
        // inject?: 'body-last' | 'body-first'

        /**
         * custom dom id
         * @default: __svg__icons__dom__
         */
        // customDomId: '__svg__icons__dom__',
      }),
    ],
  }
}

in

vite.config.ts, um das Registrierungsskript in src/main.js

import 'virtual:svg-icons-register'
einzuführen Anwendung es in Komponenten

SvgIcon-Komponente erstellen

/src/components/SvgIcon/index.vue
    <template>
      <svg aria-hidden="true" class="svg-icon" :width="props.size" :height="props.size">
        <use :xlink:href="symbolId" :fill="props.color" />
      </svg>
    </template>
    
    <script setup>
    import { computed } from &#39;vue&#39;
    const props = defineProps({
      prefix: {
        type: String,
        default: &#39;icon&#39;
      },
      name: {
        type: String,
        required: true
      },
      color: {
        type: String,
        default: &#39;#333&#39;
      },
      size: {
        type: String,
        default: &#39;1em&#39;
      }
    })
    
    const symbolId = computed(() => `#${props.prefix}-${props.name}`)
    </script>

icons-Verzeichnisstruktur

# src/icons

- icon1.svg
- icon2.svg
- icon3.svg
- dir/icon1.svg

  • Globale Registrierungskomponenten

  • # src/main.js
    
    import { createApp } from 'vue'
    import App from './App.vue'
    import router from './router'
    
    import ElementPlus from 'element-plus'
    import 'element-plus/dist/index.css'
    
    import svgIcon from "@/components/SvgIcon/index.vue";
    import &#39;virtual:svg-icons-register&#39;
    
    createApp(App)
        .use(ElementPlus)
        .use(router)
        .component('svg-icon', svgIcon)
        .mount('#app')

    Seitennutzung
  • <template>
        <svg-icon v-if="props.icon" :name="props.icon" />
        <span v-if="props.title" slot=&#39;title&#39;>{{ props.title }}</span>
    </template>
    
    <script setup>
    
    const props = defineProps({
        icon: {
            type: String,
            default: &#39;&#39;
        },
        title: {
            type: String,
            default: &#39;&#39;
        }
    })
    </script>

Holen Sie sich alle SymbolId
  • import ids from &#39;virtual:svg-icons-names&#39;
    // => [&#39;icon-icon1&#39;,&#39;icon-icon2&#39;,&#39;icon-icon3&#39;]
    (Lernvideo-Sharing: Web-Front-End-Entwicklung

    ,
  • Einführung in die Programmierung
)

    Das obige ist der detaillierte Inhalt vonEine ausführliche Analyse der Verwendung von SVG-Symbolen in vue3+vite. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn