优雅使用svg组件

背景:vue3+vite框架

代码

createSvgIconsPlugin({
        customDomId: "agents-app-svgs-id",
        iconDirs: [
          path.resolve(process.cwd(), 'src/assets/svgs'),
        ],
        // 指定symbolId格式
        symbolId: '[name]',
      })

 SvgIcon组件

<template>
  <svg :width="width" :height="height" :style="{ color: fill }">
    <use :xlink:href="symbolId" :fill="fill" />
  </svg>
</template>

<script setup lang="ts">
import { computed } from 'vue';
const props = withDefaults(
  defineProps<{
    name: string;
    width?: number | string;
    height?: number | string;
    fill?: string;
  }>(),
  {
    width: 18,
    height: 18,
    fill: '#ffffff',
  }
);

// 获取svg图标名称,需要和vite.config.ts中的配置保持一致
const symbolId = computed(() => `#${props.name}`);
</script>

<style scoped lang="scss">
svg:active,
svg:hover,
svg:focus,
svg:visited,
svg:focus-within,
svg:focus-visible,
svg:target {
  outline: none !important;
}
</style>

问题:这样使用对于assets/svgs下面的svg图片没有任何问题,但是随着项目规模变大,svg图片也会增多,这时候为了避免重名,很容易想到,通过不同的文件夹来存储,然而问题也随之出现,处于子文件夹下的图片展示不了

解决:直接上代码,只需修改下vite中的配置就ok了

createSvgIconsPlugin({
        customDomId: "agents-app-svgs-id",
        iconDirs: [
          path.resolve(process.cwd(), 'src/assets/svgs/assistant-svgs'),
          path.resolve(process.cwd(), 'src/assets/svgs'),
        ],
        // 指定symbolId格式
        symbolId: '[name]',
      })

    Notice:  此处的assistant-svgs是一个新的文件夹,如果有其余的,继续添加就可以

    Advice:  当有多个文件夹时,将子集文件夹写在前面,可以避免图片被覆盖而导致加载失败的问题,

目前先这样吧,有什么好的方法,欢迎评论,一起探讨,一起进步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值