vue3中使用svg,没有使用ts

该文介绍了在Vue项目中如何处理SVG图标,包括安装相关依赖如svg-sprite-loader和svgo-loader,配置vue.config.js以处理SVG规则,编写SVG组件用于复用,创建SVG图标存储目录及索引文件,最后在main.js中全局注册SVG组件以便在应用中使用。
摘要由CSDN通过智能技术生成

1,首先下载依赖

cnpm install --save-dev svg-sprite-loader
cnpm install --save-dev svgo
cnpm install --save-dev svgo-loader

2,然后在根目录下的vue.config.js中进行配置。 

const path = require('path')

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

 chainWebpack: config => {
    if(!isDev){
      // config.plugin('webpack-report').use(BundleAnalyzerPlugin, [
      //   {
      //     analyzerMode: 'static'
      //   }
      // ])
      config.plugin('html').tap(args => {
        // 生产环境或本地需要cdn时,才注入cdn
        args[0].cdn = cdn
        return args
      })
    }
    // 给svg规则增加⼀个排除选项
  config.module
  .rule('svg')
  .exclude.add(path.resolve(__dirname, './src/icons/svg'))

// 新增icons规则,设置svg-sprite-loader处理icons⽬录中的svg
config.module
  .rule('icons')
  .test(/\.svg$/)
  .include.add(path.resolve(__dirname, './src/icons/svg'))
  .end()
  .use('svg-sprite-loader')
  .loader('svg-sprite-loader')
  .options({ symbolId: 'icon-[name]' })
  .end()
  .use('svgo-loader')
  .loader('svgo-loader')
  },

 3.在components中写一个svg组件

路径是components/SvgIcon/index.vue

路径尽量写一样,不一样的注意配置是修改为自己的路径

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

<script setup>
import { computed ,defineProps} from 'vue';
const props=defineProps({
     iconClass: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    }
})
const iconName = computed(()=>{
  return `#icon-${props.iconClass}`
})
const svgClass = computed(()=>{
  if (props.className) {
        return 'svg-icon ' + props.className
      } else {
        return 'svg-icon'
      }
})
</script>

<style scoped>
.svg-icon {
  width: 1.2em;
  height: 1.2em;
  vertical-align: -0.18em;
  fill: currentColor;
  overflow: hidden;
}
</style>

4.写svg存放地址以及配置文件

在src下新建icons文件,在下创建svg文件用来存放svg图片,同级创建index.js

index.js

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

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

 5.然后在main.js中全局配置

import './icons' // icon
// 在main.js配置对应的组件,不能在index.js中进行配置,不然会出现空白

const app = createApp(App)
import SvgIcon from '@/components/SvgIcon/index.vue' // svg component
app.component('svg-icon', SvgIcon)

6.最在组件中使用

<svg-icon icon-class="recyclable" style="width:100%;height:100%"></svg-icon>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值