项目中引用svg图标,公共组件SvgIcon使用,注册全局组件,使用自定义插件注册全局组件

news2024/12/26 12:07:49

在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后,页面上加载的不再是图片资源,

这对页面性能来说是个很大的提升,而且我们SVG文件比img要小的很多,放在项目中几乎不占用资源。

1、安装依赖插件

pnpm install vite-plugin-svg-icons -D

2、配置

import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'
export default () => {
  return {
    plugins: [
      createSvgIconsPlugin({
        iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
        symbolId: 'icon-[dir]-[name]',
      }),
    ],
  }
}

3、main.js/ts导入

import "virtual:svg-icons-register"; //svg插件所需配置代码

4、使用,例如:

在src/assets文件下,创建icons文件

例如复制阿里图标库,svg代码,粘贴

 使用:

<!-- svg:图标外层容器节点,内部需要与use标签结合使用  -->
    <svg>
      <!-- xlink:href执行用哪一个图标,属性值务必#icon-图标名字 -->
      <!-- use标签fill属性可以设置图标的颜色·-->
      <use xlink:href="#icon-fu" fill="red"></use>
    </svg>

 效果:

如果要修改图标大小,在svg标签上,直接修改

style="width: 100px, height: 100px"

如果项目中,很多地方都需要用到图标,可以封装成一个公共组件来使用

例如:

1、在src/components目录下创建一个SvgIcon组件

代码:

<template>
  <div>
    <svg :style="{ width, height }">
      <use :xlink:href="prefix + name" :fill="color"></use>
    </svg>
  </div>
</template>

<script setup lang="ts">
//接受父组件传过来的参数
defineProps({
  //xlink:href属性值的前缀
  prefix: {
    type: String,
    default: "#icon-",
  },
  name: String,
  color: {
    type: String,
    default: "",
  },
  width: {
    type: String,
    default: "16px",
  },
  height: {
    type: String,
    default: "16px",
  },
});
</script>

<style scoped></style>

 使用:传入需要的参数,名字、颜色、尺寸

<template>
  <div class="box">
    <h1>Hello! xu</h1>
    <SvgIcon name="fu" color="red" width="200px" height="200px"></SvgIcon>
  </div>
</template>

<script setup lang="ts">
import SvgIcon from "@/components/SvgIcon/index.vue";
</script>

<style scoped lang="scss"></style>

效果:

另外,如果全局使用的地方很多,可以注册成一个全局组件来使用,这样就避免每个使用的页面都引用一遍这个SvgIcon组件

例如:在main.ts中引入

import SvgIcon from "@/components/SvgIcon/index.vue"; //全局引入svg图标组件
app.component("SvgIcon", SvgIcon); //全局注册svg图标组件

再者,如果全局公共组件很多,全局注册需要注册很多次组件,可以优化为写一个自定义插件,将全局所有的公共组件注册为全局组件

例如:全局还有一个公共分页器组件叫Pagination

利用自定义插件把这些组件变成全局组件,在components文件夹下,创建index.ts文件,在全局mian.ts,引入自定义插件对象

//引入自定义插件对象,用来注册整个项目的全局组件
import gloalComponent from "@/components/index";
app.use(gloalComponent); //安装自定义插件

index.ts代码

import SvgIcon from "./SvgIcon/index.vue";
import Pagination from "./Pagination/index.vue";
const allGloalComponent: any = { SvgIcon, Pagination };

//暴露插件对象
export default {
  //必须叫install
  install(app: any) {
    Object.keys(allGloalComponent).forEach((key) => {
      app.component(key, allGloalComponent[key]); //注册为全局组件
    });
  },
};

使用:

<template>
  <div class="box">
    <h1>Hello! xu</h1>
    <SvgIcon name="fu" color="red" width="200px" height="200px"></SvgIcon>
    <Pagination></Pagination>
  </div>
</template>

<script setup lang="ts"></script>

<style scoped lang="scss"></style>

效果:

 

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

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

相关文章

API是什么?

API是什么&#xff1f; API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制…

SAP BAPI BAPI_SALESDOCUMENT_COPY 直接实现VA01复制销售合同创建小搜订单

BAPI :BAPI_SALESDOCUMENT_COPY 输入参数 &#xff1a; 销售合同、订单类型 输出参数&#xff1a;生成的销售订单号 实现的操作:

自动分班软件:一分钟制作分班查询系统,这个工具轻松实现

作为一名老师&#xff0c;在即将到来的新学期&#xff0c;我们需要进行学生的分班工作&#xff0c;而分班查询系统可以帮助我们更加高效地完成这项工作。在这篇文章中&#xff0c;我将向大家介绍如何创建一个分班查询系统。 首先&#xff0c;我们需要确定分班查询系统的需求和…

java八股文补充

1、JAVA BIO、NIO、AIO的区别 BIO &#xff08;Blocking I/O&#xff09;&#xff1a;同步阻塞I/O模式。当有其他线程进行数据读写时阻塞等待。当用户线程发出IO请求之后&#xff0c;内核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待&#xff0c;用户线程就会处于阻…

Linux下多python版本共存

python下载官网 https://www.python.org/downloads/ python支持多版本共存&#xff0c;是大版本共存&#xff0c;小版本不共存。 python3.6 和 3.7 共存python3.6.6和python3.6.8 不共存 1.下载特定版本的python 进入官网后点击Downloads–>All releases点击‘Gzipped s…

在职读研想要成功上岸,社科院杜兰大学金融管理硕士机不可失

近年来&#xff0c;中国考研报名人数节节攀升&#xff0c;2023年考研报名人数达到了474万。在如此庞大的考生群体中&#xff0c;成功被录取的人数却不足两成&#xff0c;这一数字引起了社会各界广泛的热议和关注。招生规模如此浩大&#xff0c;录取率却如此之低。其实考研录取率…

【2023年电赛国一必备】C题报告模板--可直接使用

任务 图1 任务内容 要求 图2 基本要求内容 图3 发挥部分内容 说明 图4 说明内容 评分标准 图5 评分内容 正文 &#xff08;部分&#xff09; 摘要 本实验基于TI公司的TM4C123GH6PM主控&#xff0c;结合OPA2337芯片和其他硬件模块&#xff0c;设计并制作了一种单相逆变器…

如何快速完成 App 安全评估报告【最快当天完事】

文章目录 1. App下架展示2. 检查App是否存在问题3. 注册《安全评估》 信息4. 人工快速干预&#xff0c;加快审核步骤5. 面审阶段6. 后续 1. App下架展示 在华为应用市场上架的App突然间被下架&#xff0c;把我搞得猝不及防&#xff0c;原因如下&#xff1a; 是因为我们缺少 《…

提升项目管理效率的优秀软件推荐

Zoho Projects项目管理软件拥有随需而配的强大项目功能&#xff0c;帮助项目经理实现整体项目把控。系统以“动态管理、实时共享”的先进理论实现项目进度、成本、资源、绩效、风险等的有效跟进&#xff0c;解决项目管理中因信息滞后导致的项目失败问题&#xff0c;提升企业项目…

2.虚拟机开启kali_linux

首先你应该搞一个虚拟机&#xff0c;搞虚拟机可以看一下这个 附录三 虚拟机的使用_Suyuoa的博客-CSDN博客 然后你需要搞一个 kali linux的镜像 Get Kali | Kali Linux 镜像下载好之后解压&#xff0c;你会得到一个文件夹包含下面这些文件 之后打开VMware&#xff0c;点击打开虚…

Java SpringBoot集成Activiti7工作流

Activiti7 Java SpringBoot集成Activiti7工作流介绍项目集成引入依赖YML配置文件配置类 启动项目生成表结构Activiti的数据库支持 Activiti数据表介绍项目Demo地址&#xff1a; Java SpringBoot集成Activiti7工作流 本文项目Demo地址附在文章后方 官网主页&#xff1a;http://a…

Java 离线导包

Java 离线导包 1、问题2、解决方法 1、问题 import org.apache.commons.lang3.StringUtils; 报红色 2、解决方法 下载离线包或者在meven的repository中找到下载好的包&#xff0c;如commons-lang3-3.12.0.jar File->Project Structure->Libraries-> Java 选择离线…

OpenCV图像处理技巧之空间滤波

1. 引言 再次问好&#xff0c;图像处理爱好者们&#xff01;&#x1f31f; 在前面的章节中&#xff0c;我们学习了图像处理的基础知识&#xff0c;并展现了图像增强的魅力。在这一节中&#xff0c;我们将更深入地研究空间滤波技术。 闲话少说&#xff0c;我们直接开始吧&#…

C++20 协程(coroutine)入门

文章目录 C20 协程&#xff08;coroutine&#xff09;入门什么是协程无栈协程和有栈协程有栈协程的例子例 1例 2 对称协程与非对称协程无栈协程的模型无栈协程的调度器朴素的单线程调度器让协程学会等待Python 中的异步函数可等待对象M:N 调度器——C# 中的异步函数 小结 C20 中…

LabVIEW深度相机与三维定位实战(下)

‍‍&#x1f3e1;博客主页&#xff1a; virobotics的CSDN博客&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『LabVIEW深度学习实战』 &#x1f37b;上期文章&#xff1a;『LabVIEW深度相机与三维定位实战&#xff08;上&#xff09;』 &#…

《Python入门到精通》循环语句 while循环,for循环

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 循环语句 1、语法格式1.1、while1.2、死循环1.3、简写形式 2、continue 跳过循环…

synchronized总结

目录 一、synchronized的特性 1.1 原子性 1.2 可见性 1.3 有序性 1.4 可重入性 二、synchronized的使用 2.1 修饰普通方法 2.2 修饰静态方法 2.3 修饰代码块 三、synchronized的锁机制 3.1 偏向锁 3.2 轻量级锁 3.3 重量级锁 一、synchronized的特性 1.1 原子性 原子性是指一…

【逗老师的PMP学习笔记】3、项目经理的角色和能力

个人感觉这一篇属于打鸡血篇&#xff0c;与实战关联较弱。主要各位要思考一下&#xff0c;做好一个项目经理&#xff0c;在哪些overall的领域和能力上要让自己牛逼 一、开篇一张图 总结一句话&#xff0c;项目经理更像是一直大型交响乐团的**指挥** &#xff08;除了正向的&a…

Streamlit应用中构建多页面(三):两种方案

文章目录 1 前言2 第一种方案&#xff1a;使用Session State实现多页面交互2.1 Session State简介2.2 多页面应用的基本结构2.3 实现多页面交互的代码示例2.4 Session State机制的优缺点 3 第二种方案&#xff1a;Streamlit内置多页面方案&#xff08;更为推荐&#xff09;3.1 …

DoIP学习笔记系列:(三)用CAPL脚本过“安全认证”,$27服务实现

文章目录 1. 如何调用接口通过安全认证?如何新建CAPL工程,在此不再赘述,本章主要分享一下如何在CAPL中调用DoIP接口、diag接口进行DoIP和诊断的测试。 注意:CANoe工具本身的使用没什么难的,所谓会者不难难者不会,各位小伙伴有疑问要多问,多交流,往往难事都只是一层窗户…