Table of Contents
1. Install svg-sprite-loader
2. Create a new component index.vue under src/components/svgIcon
3. Create the icons folder in assets
4. Create vue.config.js under the same level as src Configuration
5. Introduce it into main.js and make some minor modifications
6. On the page Use
7. File directory structure and its effect display
Home Web Front-end Vue.js How to use svg in vue3+vue-cli4

How to use svg in vue3+vue-cli4

May 11, 2023 pm 05:58 PM
svg vue3 vue-cli4

1. Install svg-sprite-loader

npm install svg-sprite-loader --save-dev
Copy after login

2. Create a new component index.vue under src/components/svgIcon

<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>
Copy after login

3. Create the icons folder in assets

The imgs folder contains an svg folder, containing svg format files, and an index.js file. The content of the file is as follows

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

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

4. Create vue.config.js under the same level as src Configuration

As summarized in the comment area, if it is in a non-vue-cli4 project and an error is reported in config.module.rules.delete("svg");, you can try to use config.module.rule("svg").exclude.add(resolve("src/assets/imgs")).end();Replace this statement

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

5. Introduce it into main.js and make some minor modifications

Note here that the component registration is placed in main.js. Otherwise, [Vue warn]: Failed to resolve component: svg-icon will be reported. It is predicted that the parent component has been created first but the child component has not been created yet, leading to the occurrence of this problem.

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;)
Copy after login

6. On the page Use

<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>
Copy after login

7. File directory structure and its effect display

How to use svg in vue3+vue-cli4

The above is the detailed content of How to use svg in vue3+vue-cli4. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article

Hot Article

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to use tinymce in vue3 project How to use tinymce in vue3 project May 19, 2023 pm 08:40 PM

How to use tinymce in vue3 project

vue3+vite: How to solve the error when using require to dynamically import images in src vue3+vite: How to solve the error when using require to dynamically import images in src May 21, 2023 pm 03:16 PM

vue3+vite: How to solve the error when using require to dynamically import images in src

How Vue3 parses markdown and implements code highlighting How Vue3 parses markdown and implements code highlighting May 20, 2023 pm 04:16 PM

How Vue3 parses markdown and implements code highlighting

How to refresh partial content of the page in Vue3 How to refresh partial content of the page in Vue3 May 26, 2023 pm 05:31 PM

How to refresh partial content of the page in Vue3

How to use Vue3 reusable components How to use Vue3 reusable components May 20, 2023 pm 07:25 PM

How to use Vue3 reusable components

How to select an avatar and crop it in Vue3 How to select an avatar and crop it in Vue3 May 29, 2023 am 10:22 AM

How to select an avatar and crop it in Vue3

How to use Vue3 and Element Plus to implement automatic import How to use Vue3 and Element Plus to implement automatic import May 22, 2023 pm 04:58 PM

How to use Vue3 and Element Plus to implement automatic import

How to encapsulate ECharts components in vue3 How to encapsulate ECharts components in vue3 May 20, 2023 pm 03:22 PM

How to encapsulate ECharts components in vue3

See all articles