vue3 + vite + ts 封装 SvgIcon组件

环境 vite + vue3 + ts

text 复制代码
"vue": "^3.3.4",
"vite": "^4.4.0",
"typescript": "^5.0.2",

# 需要下载的依赖
"vite-plugin-svg-icons": "^2.0.1",

不同版本可能存在一定差异, 这篇文章不可能对应所有版本, 但具有一定的参考性,

1. 安装依赖

text 复制代码
pnpn install vite-plugin-svg-icons -D

2. 配置vite.config.ts 文件

js 复制代码
//引入依赖
import path from "path";
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
 
//启用插件
createSvgIconsPlugin({
  // 指定图标文件夹,绝对路径(NODE代码)
  iconDirs: [path.resolve(process.cwd(), "src/svgs")],
})

3. 创建文件夹

在src文件下新建一个文件夹, 里面存放svg图标

4. 封装SvgIcon组件

html 复制代码
<template>
    <svg
        :class="className"
        class="svg-icon"
        :style="iconStyle"
        aria-hidden="true"
    >
      <use :xlink:href="iconName"></use>
    </svg>
</template>

<script setup lang="ts">
import {computed} from "vue";

const props = defineProps({
  // 类名
  className: {
    type: String, // 可以传入类名
    default: '',
  },
  iconStyle: { // icon的样式, 是一个对象
    type: Object,
    default: ()=>({})
  },
  name: { //应用的图标名称
    type: String,
    default: ''
  }
})

const iconName = computed(() => {
  return `#icon-${props.name}`
})

</script>

<style lang="scss" scoped>
  svg {
    width: 1em;
    height: 1em;
    vertical-align: -0.15em;
    fill: currentColor; // 填充为当前颜色
    overflow: hidden;
  }
</style>

路径的话, 找一个方便管理的地方 比如 src/components 文件下

5. 全局引入

在main.ts中对组件进行引入

js 复制代码
// 引入Svg组件
import "virtual:svg-icons-register";
import SvgIcon from "./components/SvgIcon.vue";


const app = createApp(App);

// ....
// 全局注册
app.component('SvgIcon',SvgIcon)

// ....
app.mount('#app')

6.使用

html 复制代码
<SvgIcon 
	name="[这里是的名称,按照模板的写法文件的名称即可]"
	:iconStyle="{'这里是对象形式的样式'}"
	:iconClass="这里是类名"
></SvgIcon>

备注: SvgIcon组件的, 按照自己的喜好与需求去封装,

还有很多使用其他插件的教程, 大家根据自己的需求去下载使用,

但对于每篇教程都要保留一定的思考性, 如果能找到对应的版本就很棒了,

没有得话就找一下相似版本的教程作为参考,

文章最后放上一张'二次元'

本文可以白嫖!!!

相关推荐
莪_幻尘5 小时前
4 个 3D 游戏,总体积 3.82MB:拆解 Claude 的 one-shot 工程链路
前端·ai编程·three.js
Highcharts.js5 小时前
Highcharts智能数据分析平台Orbit 多语言配置技术文档
java·前端·javascript·highcharts·orbit·智能数据分析·设置文档
ABAP-張旺6 小时前
SAP ABAP 实战:SAP GUI上做 HTML 看板报表
前端·html·sap·abap
时间的情敌6 小时前
Cesium 建筑单体化、3DTiles 分类、楼层显隐、分户高亮(BIM + 倾斜孪生高频)
前端·3d·cesium
IT_陈寒6 小时前
JavaScript项目实战经验分享:从内存泄漏到性能优化的血泪史
前端·人工智能·后端
计算机毕设定制辅导-无忧学长7 小时前
《基于Spring Boot的迷游哈游戏综合服务平台的开发》
java·vue.js·spring boot·mysql·迷游哈游戏综合服务平台
恋猫de小郭8 小时前
Flutter 3.50 & Dart 3.14 发布,快来看看有什么更新吧
android·前端·flutter
非优秀程序员15 小时前
第10章 千团出世|《互联网产品恩仇录》
前端
非优秀程序员15 小时前
第11章 小高在对面|《互联网产品恩仇录》
前端
非优秀程序员15 小时前
第14章 只剩美团|《互联网产品恩仇录》
前端