Heim > Web-Frontend > View.js > So verwenden Sie SVG in vue3+vue-cli4

So verwenden Sie SVG in vue3+vue-cli4

WBOY
Freigeben: 2023-05-11 17:58:06
nach vorne
1235 Leute haben es durchsucht

1. Installieren Sie den SVG-Sprite-Loader

npm install svg-sprite-loader --save-dev
Nach dem Login kopieren

2. Erstellen Sie einen neuen Komponentenordner „index.vue“ im Ordner „assets“ imgs Formatdatei und eine index.js-Datei sind wie folgt:

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

<script>
import { computed } from "@vue/reactivity";
export default {
  name: "baseSvgIcon",
  props: {
    iconClass: { type: String },
    className: { type: String },
  },
  setup(props) {
    const iconName = computed(() => {
      return props.iconClass ? `#icon-${props.iconClass}` : "#icon";
    });
    const svgClass = computed(() => {
      return props.className ? "svg-icon " + props.className : "svg-icon";
    });
    return { iconName, svgClass };
  },
};
</script>

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

4. Erstellen Sie vue.config.js unter derselben src-Ebene wie im Kommentarbereich zusammengefasst, sofern es sich nicht um eine Datei handelt -vue-cli4-Projekt, ersetzen Sie die Anweisung in

// 获取当前目录所有为.svg的文件
const req = require.context(&#39;./svg&#39;, false, /\.svg$/)

// 解析获取的.svg文件的文件名称并返回
const requireAll = (requireContext) =>{
    return requireContext.keys().map(requireContext)
}
requireAll(req)
Nach dem Login kopieren

5. Fügen Sie sie in main.js ein und nehmen Sie einige kleinere Änderungen vor

Beachten Sie hier, dass die Komponentenregistrierung in main.js platziert wird. Andernfalls wird [Vue-Warnung] gemeldet: Komponente konnte nicht aufgelöst werden: SVG-Symbol Es wird vorhergesagt, dass die übergeordnete Komponente zuerst erstellt wurde, die untergeordnete Komponente jedoch noch nicht, was dieses Problem verursacht

const path = require(&#39;path&#39;)

function resolve(dir) {
  return path.join(__dirname, &#39;.&#39;, dir)
}

module.exports = {
  chainWebpack: config => {
    config.module.rules.delete("svg"); // 重点:删除默认配置中处理svg,
    config.module
      .rule(&#39;svg-sprite-loader&#39;)
      .test(/\.svg$/)
      .include
      .add(resolve(&#39;src/assets/imgs&#39;)) // 处理svg目录
      .end()
      .use(&#39;svg-sprite-loader&#39;)
      .loader(&#39;svg-sprite-loader&#39;)
      .options({
        symbolId: &#39;icon-[name]&#39;
      })
  },
};
Nach dem Login kopieren
config.module.rules.delete("svg");报错的话,可以尝试使用config.module.rule("svg").exclude.add(resolve("src/assets/imgs")).end(); 6. Verwendung

import { createApp } from &#39;vue&#39;
import App from &#39;./App.vue&#39;
import router from &#39;./router&#39;
import store from &#39;./store&#39;
import &#39;@/assets/icons&#39;

const app = createApp(App)

import SvgIcon from &#39;@/components/svgIcon&#39; 
app.component(&#39;svg-icon&#39;, SvgIcon)

app.use(store).use(router).mount(&#39;#app&#39;)
Nach dem Login kopieren
auf der Seite

7. Dateiverzeichnisstruktur und ihre Wirkungsanzeige

Das obige ist der detaillierte Inhalt vonSo verwenden Sie SVG in vue3+vue-cli4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage