vue3.0使用svg(亲测有效)

2021-12-30  本文已影响0人  goodTime_luo7
一、安装依赖
npm install svg-sprite-loader -D
二、新建文件夹和文件src/components/SvgIcon/index.vue
<template>
  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName"></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>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>
三、src下新建文件夹icons/svg,用来存放.svg文件
四、修改vue.config.js文件
const path = require('path')

function resolve(dir) {
  return path.join(__dirname, '.', dir)
}

module.exports = {
  chainWebpack: config => {
    config.module.rules.delete("svg"); //重点:删除默认配置中处理svg,
    config.module
      .rule('svg-sprite-loader')
      .test(/\.svg$/)
      .include
      .add(resolve('src/icons')) //处理svg目录
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      })
  },
};
五、修改main.js
const app = createApp(App)
// 导入SvgIcon组件
import SvgIcon from '@/components/SvgIcon/index.vue' 
const req = require.context('@/icons/svg', false, /\.svg$/)  
req.keys().map(req)
app.component('svg-icon', SvgIcon)
上一篇 下一篇

猜你喜欢

热点阅读