首页 资源列表 文章列表

Vue3+TS中svg图标的使用-vite-plugin-svg-icons,自动使用图标

安装

 pnpm i vite-plugin-svg-icons -D

配置vite.config.ts

import { createSvgIconsPlugin } from "vite-plugin-svg-icons";

plugins里面新增配置

 createSvgIconsPlugin({
      // 缓存图标位置
      iconDirs: [resolve(pathSrc, "assets/icons")],
      symbolId: "icon-[dir]-[name]",
    }),

main.ts文件新增

// 本地SVG图标
import "virtual:svg-icons-register";

src/assets/icons文件夹下面添加icon图标


src/components新建组件SvgIcon文件夹新建文件index.vue

<template>
  <svg aria-hidden="true" class="svg-icon" :style="'width:' + size + ';height:' + size">
    <use :xlink:href="symbolId" :fill="color" />
  </svg>
</template>

<script setup lang="ts">
const props = defineProps({
  prefix: {
    type: String,
    default: "icon",
  },
  iconClass: {
    type: String,
    required: false,
    default: "",
  },
  color: {
    type: String,
    default: "",
  },
  size: {
    type: String,
    default: "1em",
  },
});

const symbolId = computed(() => `#${props.prefix}-${props.iconClass}`);
</script>

<style scoped>
.svg-icon {
  display: inline-block;
  width: 1em;
  height: 1em;
  overflow: hidden;
  vertical-align: -0.15em; /* 因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果 */
  outline: none;
  fill: currentcolor; /* 定义元素的颜色,currentColor是一个变量,这个变量的值就表示当前元素的color值,如果当前元素未设置color值,则从父元素继承 */
}
</style>

页面调用

<svg-icon :icon-class="scope.row.icon" />