Home > Web Front-end > Vue.js > How to use svg in vue3+vue-cli4

How to use svg in vue3+vue-cli4

WBOY
Release: 2023-05-11 17:58:06
forward
1235 people have browsed it

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!

Related labels:
source:yisu.com
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template