vite vue3 ts 全局封装自定义svg组件,全局引入

news2024/11/17 21:48:31

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

yarn add vite-plugin-svg-icons -D

2.配置vite.config.ts文件,配置插件

import path from 'path'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'


plugins: [
    vue(),
    // 配置svg 
    createSvgIconsPlugin({
      // 指定需要缓存的图标文件夹
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
      // 指定symbolId格式
      symbolId: 'icon-[dir]-[name]'
    })
  ],

3.在main.ts入口文件导入svg配置文件

// 使用svg 需要引入svg-icons-register 配置
import 'virtual:svg-icons-register'

4.使用vite-plugin-svg-icons插件还需要fast-glob依赖

yarn add fast-glob

5.使用svg图标

 <!-- 测试使用svg图标 -->
<!-- svg 为使用根标签 图标大小放在svg 标签中-->
<!-- svg得配合use标签使用 xlink:href属性值是:#icon-svg文件名,fill属性为图标颜色 -->
<svg style="width: 16px;height: 16px;">
    <use xlink:href="#icon-home" fill="red"></use>
</svg>

效果如下: 

 6.为了更好地复用,接下来将svg封装成一个全局组件,以后使用更加方便,新建component/svgicons/index.vue

<!-- vue3 -->
<!-- 封装svg组件 -->
<template>
    <!-- svg 为使用根标签 图标大小放在svg 标签中-->
    <!-- svg得配合use标签使用 xlink:href属性值是:#icon-svg文件名,fill属性为图标颜色 -->
    <svg :style="{ width, height }">
        <use :xlink:href="prefix + name" :fill="color"></use>
    </svg>
</template>

<script setup lang='ts'>
//接收父组件传来的参数
defineProps({
    // 接收父组件传来的前缀
    prefix: {
        type: String,
        default: '#icon-'
    },
    // 接收父组件传来的svg文件名
    name: {
        type: String,
        default: 'default'
    },
    // 接收父组件传来的图标颜色
    color: {
        type: String,
        default: '#ccc'
    },
    // 接收父组件传来的图标宽度
    width: {
        type: String,
        default: '16px'
    },
    // 接收父组件传来的图标高度
    height: {
        type: String,
        default: '16px'
    }
})


</script>

<style scope></style>

7.使用svgicon组件

<!-- 测试使用svg图标 -->
<svgIcons name="home" color="red" width="100px" height="100px" />

<script setup lang='ts'>
import svgIcons from '@/components/svgIcons/index.vue'
</script>

效果如下:

8.因为项目使用svg组件频率很高,所以将svg组件注册成全局组件,新建service/globalComponent/index.ts

// 引入全局组件
import svgIcons from '@/components/svgIcons/index.vue'
import globalC from '@/components/global/index.vue'

// 引入vue内置app 和component 类型
import type { App, Component } from 'vue'



// 新建全局组件对象,将全局组件对象添加到全局组件对象中,是类型限定
const globalComponents: { [name: string]: Component } = { svgIcons, globalC }


// 导出全局组件对象
export default {
    install(app: App) {
        // Object.keys(globalComponents)可以获取所有全局组件的key数组
        // .forEach(key => { }) 遍历key 数组,得到每个全局组件的值
        // app.component(key, globalComponents[key]) 将全局组件添加到app中
        Object.keys(globalComponents).forEach(key => {
            app.component(key, globalComponents[key])
        })
    }
}

 9.在main.ts中引入并使用

// 引入全局组件配置
import globalComponent from './service/globalComponent/index.ts'

// 实例化应用app
const app = createApp(App)
// 注册全局组件
app.use(globalComponent)
// 挂载app
app.mount('#app')

10.使用全局组件

<!-- 测试使用svg图标 -->
<svgIcons name="home" color="green" width="100px" height="100px" />

<!-- 测试使用antd 按钮 -->
<a-button type="primary">Primary Button</a-button>

<!-- 测试使用全局组件 -->
<globalC />

效果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Microsoft Visual Studio 中使用Cpp代码调用python代码

Microsoft Visual Studio中Cpp调用Python代码 本文介绍如何在Microsoft Visual Studio中&#xff0c;开发cpp项目时&#xff0c;调用python代码。 文章目录 Microsoft Visual Studio中Cpp调用Python代码前言一、Cpp生成exe文件1.1 安装python环境1.2 配置Microsoft Visual Stu…

vue ant DatePicker 日期选择器 限制日期可控范围

场景 限制当前日期之前不能选择 限制只能选择日期区间内 Ant Design Vue 效果 <a-date-picker :disabledDate"disabledDate"></a-date-picker>method // 限制日期选择disabledDate(current) {return current && current > moment().endOf(&…

JSON parse error: Cannot deserialize instance of `xxx` out of START_ARRAY token

报错原因 前端传参类型是数组&#xff0c;后端接收参数类型是字符串。 解决办法 前端传参类型改为字符串即可。 如下图 【修改前】 【修改后】

【Linux】安装与配置虚拟机及虚拟机服务器坏境配置与连接

目录 操作系统介绍 什么是操作系统 常见操作系统 UNIX操作系统 linux操作系统 mac操作系统 嵌入式操作系统 个人版本和服务器版本的区别 安装VMWare虚拟机 VMWare虚拟网卡 ​编辑 配置虚拟网络编辑器 ​编辑 安装配置Windows Server 2012 R2 安装Windows Server 2…

如何解决电脑中缺失kernel32.dll文件的问题,四种常见的解决方法

在使用电脑过程中&#xff0c;有时我们可能会遇到一些错误提示&#xff0c;例如“找不到或缺少kernel32.dll文件”。遇到这种情况下&#xff0c;我们可以采取哪些措施来解决这个问题呢&#xff1f;本文将介绍关于kernel32.dll文件的作用&#xff0c;并提供四种常见的解决方法。…

拍摄花絮丨《巴渝小将》走进四川·五华山旅游区拍摄圆满成功!

巴渝小将&#xff0c;乘风破浪 本期节目孩子们离开父母&#xff0c;来到五华山旅游区&#xff0c;开启了两天一夜的录制挑战&#xff0c;他们究竟有着怎样的精彩表现呢&#xff0c;让我们一起往下看吧! 五华山旅游区 五华山旅游区是国家4A级旅游景区&#xff0c;位于四川邻水县…

【哈士奇赠书活动 - 44期】- 〖从零基础到精通Flutter开发〗

文章目录 ⭐️ 赠书 - 《从零基础到精通Flutter开发》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《从零基础到精通Flutter开发》 ⭐️ 内容简介 本书由浅入深地带领读者进入Flutter开发的世界&#xff0c;从Flutter的起源讲起&#xff0c…

Vue前端学习记录

目录 1 基础语法 v-text v-html v-on v-show v-if v-bind 2 简单应用 2.1 计数器 2.1.1所用知识 2.1.2代码及结果展示 2.2图片切换 2.2.1所用知识 2.2.2代码及结果展示 1 基础语法 v-text 设置标签的内容&#xff08;要替换部分字符用差值表达式{{}}&#xff09…

【RTOS学习】软件定时器 | 中断处理

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 软件定时器 | 中断处理 &#x1f3c0;软件定时器⚽守护任务守护任务的调度 ⚽使用软件定时器的函数…

如何配置微信小程序id

使用uni-app开发微信小程序项目&#xff0c;配置好微信小程序id是必不可少的。 一、如何找微信小程序id 二、如何配置微信小程序id

Unity之ShaderGraph如何实现冰冻效果

前言 今天我们来实现一个冰冻的效果,非常的炫酷哦。 如下图所示: 主要节点 Voronoi:根据输入UV生成 Voronoi 或Worley噪声。Voronoi 噪声是通过计算像素和点阵之间的距离生成的。通过由输入角度偏移控制的伪随机数偏移这些点,可以生成细胞簇。这些单元的规模以及产生的…

Seata入门系列【15】@GlobalLock注解使用场景及源码分析

1 前言 在Seata 中提供了一个全局锁注解GlobalLock&#xff0c;字面意思是全局锁&#xff0c;搜索相关文档&#xff0c;发现资料很少&#xff0c;所以分析下它的应用场景和基本原理&#xff0c;首先看下源码中对该注解的说明&#xff1a; // 声明事务仅在单个本地RM中执行 //…

Map和Set【OJ练习题】

文章目录 常用的Map和Set的使用方法1.数据去重2.统计出现的次数 数组中出现次数超过一半的数字缺失的第一个正整数只出现一次的数字随机链表的复制石头和宝石 常用的Map和Set的使用方法 1.数据去重 假设有10万个数据&#xff0c;如何去重重复的数据&#xff0c;重复的数据只保…

C++基础算法⑥——信奥一本通递归算法(全排列、分解因数、菲波那契数列、Pell数列、爬楼梯、汉诺塔问题)

递归算法 1199&#xff1a;全排列1200&#xff1a;分解因数1201&#xff1a;菲波那契数列1202&#xff1a;Pell数列1204&#xff1a;爬楼梯1205&#xff1a;汉诺塔问题 1199&#xff1a;全排列 由题目可知&#xff0c;输入一个字符串&#xff0c;我们要对字符串进行所有可能的排…

基于Jsp+Servlet+MySql的汉服网站的设计与实现-源码+毕业论文

源码和文档下载地址: https://juzhendongli.store/commodity/details/16 百度云盘中存储有。

Python 编写 Flink 应用程序经验记录(Flink1.17.1)

目录 官方API文档 提交作业到集群运行 官方示例 环境 编写一个 Flink Python Table API 程序 执行一个 Flink Python Table API 程序 实例处理Kafka后入库到Mysql 下载依赖 flink-kafka jar 读取kafka数据 写入mysql数据 flink-mysql jar 官方API文档 https://nigh…

计网小题题库整理第一轮(面向期末基础)(2)

该系列第二期&#xff0c;第一期链接在这~ 计网小题题库整理第一轮&#xff08;面向期末基础&#xff09;&#xff08;1&#xff09;https://blog.csdn.net/jsl123x/article/details/134030486?spm1001.2014.3001.5501 一.选择题 1、Internet的前身是 &#xff08;C &#x…

Visual Studio远程连接Linux编译代码时,头文件在/usr/include中找不到,文件存在于/usr/include的子目录中

文章目录 1 问题的提出2 问题分析3 问题的解决 1 问题的提出 VS2022在编译数据安全传输平台时&#xff0c;远程连接到Centos上进行编译&#xff0c;但是提示找不到json头文件。 2 问题分析 在Linux系统下编译代码时&#xff0c;系统会主动到/usr/include目录主动搜索头文件。…

解释器模式——化繁为简的翻译机

● 解释器模式介绍 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种用的比较少的行为型模式&#xff0c;其提供了一种解释语言的语法或表达的方式&#xff0c;该模式定义了一个表达式接口&#xff0c;通过该接口解释一个特定的上下文。在这么多的设计模式中&…

【神印王座】改编遇瓶颈,伊莱克斯无建模,皓晨加戏被绞杀,喜提五挂

【侵权联系删除】【文/郑尔巴金】 神印王座动画第78集已经更新了&#xff0c;官方实锤不会断更了&#xff0c;这可真的太爽了。龙皓晨在永恒之塔开始接受伊莱克斯的传承&#xff0c;不过剧情方面有点小瑕疵。伊莱克斯如此重要角色&#xff0c;竟然没有建模&#xff0c;龙皓晨更…