ホームページ  >  記事  >  ウェブフロントエンド  >  vue3+vue-cli4でsvgを使用する方法

vue3+vue-cli4でsvgを使用する方法

WBOY
WBOY転載
2023-05-11 17:58:061131ブラウズ

1. svg-sprite-loader をインストールします

npm install svg-sprite-loader --save-dev

2. src/components/svgIcon に新しいコンポーネントindex.vueを作成します

<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>

3. アセットにアイコンフォルダーを作成します

imgs フォルダーには、svg 形式のファイルが含まれる svg フォルダーと、index.js ファイルが含まれており、ファイルの内容は次のとおりです

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

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

4. 同じ配下に vue.config.js を作成しますsrc 構成としてのレベル

コメント領域にまとめられているように、vue-cli4 以外のプロジェクトにあり、エラーが config.module.rules.delete("svg"); で報告される場合。 config.module.rule("svg").exclude.add(resolve("src/assets/imgs")).end();このステートメントを置き換えてみてください

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;
      })
  },
};

5. main.js に導入し、いくつかの小さな変更を加えます

ここで、コンポーネントの登録は main.js に配置されることに注意してください。それ以外の場合は、「[Vue warn]: Failed tosolveComponent: svg-icon」が報告され、親コンポーネントは先に作成されているが、子コンポーネントがまだ作成されていないことが予測され、本問題が発生します。 #

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;)

6. ページ上で

<div class="topLeft">
  <svg-icon icon-class="category"></svg-icon>
</div>
<div class="topCenter"></div>
<div class="topRight">
  <svg-icon icon-class="search"></svg-icon>
</div>

を使用します。 7. ファイルのディレクトリ構造とその効果の表示

vue3+vue-cli4でsvgを使用する方法

以上がvue3+vue-cli4でsvgを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。