vue3批量创建svg icon组件

1、通过插件动态导入svg文件

安装vite插件vite-plugin-svg-icons

npm i vite-plugin-svg-icons -D

配置插件svg-icon.ts

import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
import path from "path";export default function createSvgIcon(isBuild: boolean) {return createSvgIconsPlugin({iconDirs: [path.resolve(process.cwd(), "src/assets/icons/svg")],symbolId: "icon-[dir]-[name]",svgoOptions: isBuild,});
}

vite导入插件vite.config.ts

export default defineConfig(({ command, mode }) => {const env = loadEnv(mode, process.cwd());const { VITE_APP_ENV } = env;const config = command === "build" ? buildConfig : serveConfig;return {plugins: [vue(), createSvgIcon(command === "build")],resolve: {alias: {"@": fileURLToPath(new URL("./src", import.meta.url)),},},...config,};
});

main.ts引入svg文件

import "virtual:svg-icons-register";

2、将svg批量生成为vue组件

本例子以element plus为例,将svg生成为element plus icon 对应的svg component

svg组件(svgIcon.vue)

<template><svg viewBox="0 0 1024 1024"><use :xlink:href="iconName" /></svg>
</template><script lang="ts" name="CompSvgIcon" setup>
import { computed } from "vue";const props = withDefaults(defineProps<{iconClass: string;}>(),{}
);const iconName = computed(() => `#icon-${props.iconClass}`);
</script><style scope lang="less"></style>

批量生成svg组件(myIcon.ts)

import { defineComponent, h } from "vue";
import svgIcon from "./index.vue";
const modules = import.meta.glob("./../../assets/icons/svg/*.svg");// 获取icon名称
const filenNmes = [];
for (const path in modules) {const name = path.split("assets/icons/svg/")[1].split(".svg");filenNmes.push(name[0]);
}/***  icons组件名称数组 (my + Filename)*/
export const myIconNames = filenNmes.map((name) => "my" + name.replace(/^./, (L) => L.toUpperCase()));/***  icons组件数组*/
const myIcons = filenNmes.map((name) => {return {name: "my" + name.replace(/^./, (L) => L.toUpperCase()),component: defineComponent({render() {return h(svgIcon, { iconClass: name });},}),};
});export default myIcons;

main.ts文件中引入

import myIcons from "@/components/SvgIcon/myIcon";const app = createApp(App);
myIcons.forEach((item) => {app.component(item.name, item.component);
});

使用自定义svg组件同el icon一致,icon组件名称为(my + Filename),名称可以myIcon.ts自行修改

<el-icon><my404 />
</el-icon>

效果

3、源码地址

vue3+element plus+ts::https://gitee.com/huanglgln/vue-sys-manage-el

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499542.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好物周刊#42:国产项目管理软件

https://github.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. 菠萝博客 基于 Java 的菠萝博客系统&#xff0c;简单易部署&#xff0c;精致主题&#xff0c;贴心服务&#xf…

模型优化_XGBOOST学习曲线及改进,泛化误差

代码 from xgboost import XGBRegressor as XGBR from sklearn.ensemble import RandomForestRegressor as RFR from sklearn.linear_model import LinearRegression as LR from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split,c…

ChatGPT提示词工程师AI大神吴恩达2023年视频课程学习实践

前言 刚才看了一个视频系列教程&#xff0c;很短&#xff0c;但收获很大&#xff0c;毕竟是一手知识来源&#xff0c;吴恩达大神亲自讲解&#xff0c;他说的话&#xff0c;我都信。这里写个笔记&#xff0c;顺便把知识点实践一下。视频可以去B站上搜索 吴恩达 prompt &#xf…

上门服务系统|上门服务小程序节省时间的必选利器

在如今的快节奏时代&#xff0c;我们的时间越来越宝贵。为了省时省力&#xff0c;越来越多的人选择使用上门服务类小程序。那么&#xff0c;为什么这些小程序能够如此受人欢迎呢&#xff1f;让我们一起揭示其中的原因。 一、方便快捷 上门服务类小程序最大的特点就是方便快捷。…

【探索AI】探索未来-计算机专业必看的几部电影

计算机专业必看的几部电影 计算机专业必看的几部电影&#xff0c;就像一场精彩的编程盛宴&#xff01;《黑客帝国》让你穿越虚拟世界&#xff0c;感受高科技的魅力&#xff1b;《社交网络》揭示了互联网巨头的创业之路&#xff0c;《源代码》带你穿越时间解救世界&#xff0c;…

Zabbix企业运维监控工具

Zabbix企业级监控方案 常见监控软件介绍 Cacti Cacti是一套基于 PHP、MySQL、SNMP 及 RRD Tool 开发的监测图形分析工具&#xff0c;Cacti 是使用轮询的方式由主服务器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个轮询的过程就非常的耗时&#xff0…

【驱动】TI AM437x(USB-01):USB Functionfs使用

1、内核、设备树配置USB Functionfs 1.1、配置内核 1)清理 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean2)生成配置文件.config make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- tisdk_am437x-evm_defconfig3)查看、修改配置项 make ARCH=arm CROSS…

Unity UI适配规则和对热门游戏适配策略的拆解

前言 本文会介绍一些关于UI适配的基础概念&#xff0c;并且统计了市面上常见的设备的分辨率的情况。同时通过拆解目前市面上较为成功的两款休闲游戏Royal Match和Monopoly GO(两款均为近期游戏付费榜前几的游戏)&#xff0c;大致推断出他们的适配策略&#xff0c;以供学习和参…

WebServer -- 日志系统(下)

目录 &#x1f33c;整体思路 &#x1f382;基础API fputs 可变参数宏 __VA_ARGS__ fflush &#x1f6a9;流程图与日志类定义 流程图 日志类定义 &#x1f33c;功能实现 生成日志文件 && 判断写入方式 日志分级与分文件 &#x1f33c;整体思路 日志系统分两部…

Python:练习:输出int值a占b的百分之几。例如:输入1和4,输出:25%。

案例&#xff1a; 输出int值a占b的百分之几。例如&#xff1a;输入1和4&#xff0c;输出&#xff1a;25%。 思考&#xff1a; 所有的一步步思考&#xff0c;最后综合起来。 首先&#xff0c;确定 输出&#xff0c;那么就用input&#xff0c;而且是int值&#xff0c;所以肯定…

RK3568 android11 调试陀螺仪模块 MPU6500

一&#xff0c;MPU6500功能介绍 1.简介 MPU6500是一款由TDK生产的运动/惯性传感器&#xff0c;属于惯性测量设备&#xff08;IMU&#xff09;的一种。MPU6500集成了3轴加速度计、3轴陀螺仪和一个板载数字运动处理器&#xff08;DMP&#xff09;&#xff0c;能够提供6轴的运动…

【性能测试】loadrunner12.55--知识准备

1.0. 前言 ​ 在性能测试中&#xff0c;牵扯到了许多比较杂的知识点&#xff0c;这里将给大家说一下&#xff0c;loadrunner性能测试前需要做的一些准备&#xff0c;本节中我们将先从性能测试的一些术语入手&#xff0c;再到HTTP的一些知识&#xff0c;最后导我们loadrunner12…