vue3中配置svg

news/2024/12/17 15:25:05/文章来源:https://www.cnblogs.com/shyhuahua/p/18382390
  • 整体目标

实现一个在 Vue 项目中方便使用 SVG 图标,允许在页面中通过自定义标签直接引用 SVG 图标,无需手动引入每个图标文件。
  • 具体步骤

1. 使用方式

页面中直接写标签,myicon是svg图片文件名,不需要引入。myicon文件放在指定的svg目录中即可。

<svg-icon icon-class="myicon" 

2. 实现方式

(1)新建vite文件夹,建一个plugins文件夹,新建一个svg-icon.js文件,内容如下

// 用到插件 "vite-plugin-svg-icons": "2.0.1" 自行下载依赖
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
import path from 'path';// 此函数用于创建 SVG 图标插件实例
export default function createSvgIcon(isBuild) {// 返回一个通过 createSvgIconsPlugin 创建的插件实例return createSvgIconsPlugin({// iconDirs 是一个数组,指定了包含 SVG 图标的目录路径// 通过 path.resolve 和 process.cwd 获取当前工作目录,然后指向'src/assets/icons/svg'目录iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')],// symbolId 定义了生成的 SVG 图标的唯一标识符格式symbolId: 'icon-[dir]-[name]',// svgoOptions 根据传入的 isBuild 参数确定// 如果 isBuild 为 true,可能在构建阶段传递一些优化 SVG 的选项给 svgo
        svgoOptions: isBuild,});
}

(2)在plugins文件夹中,新建一个index.js文件, 引入刚才创建的svg-icon.js

import vue from '@vitejs/plugin-vue';
import createSvgIcon from './svg-icon';// 此函数用于创建 Vite 插件数组
export default function createVitePlugins(viteEnv, isBuild = false) {// 定义一个数组来存储 Vite 插件const vitePlugins = [vue()];// 将创建 SVG 图标插件的函数结果添加到插件数组中
    vitePlugins.push(createSvgIcon(isBuild));// 如果是构建阶段(isBuild 为 true),将压缩插件函数的结果添加到插件数组中isBuild && vitePlugins.push(...createCompression(viteEnv));// 返回 Vite 插件数组return vitePlugins;
}

(3) 在vue.config.js文件中配置,如图

// 引入
import createVitePlugins from './vite/plugins'; plugins: createVitePlugins(env, command === 'build'), // 用于指定要应用于项目构建过程的插件列表

 (4)在compenonts文件夹中建一个SvgIcon文件夹,新建index.js文件

import * as components from '@element-plus/icons-vue';// 默认导出
export default {// install 方法用于将插件安装到 Vue 应用实例中install: (app) => {// 遍历从 '@element-plus/icons-vue' 导入的所有组件for (const key in components) {// 获取当前遍历到的组件的配置信息const componentConfig = components[key];// 将当前组件注册到 Vue 应用实例中,使用组件的名称作为注册名
            app.component(componentConfig.name, componentConfig);}},
};

(5) 在SvgIcon文件夹中,新建index.vue文件

<template>
    <!-- SVG 元素,用于显示图标 -->
    <svg :class="svgClass" aria-hidden="true">
        <!-- 使用 xlink:href 属性引用图标 -->
        <use :xlink:href="iconName" :fill="color" />
    </svg>
</template>

<script>
export default defineComponent({
    props: {
        // 接收传递进来的图标类名,类型为字符串,且是必需的属性
        iconClass: {
            type: String,
            required: true,
        },
        // 接收传递进来的额外的类名,类型为字符串,默认值为空字符串
        className: {
            type: String,
            default: '',
        },
        // 接收传递进来的颜色值,类型为字符串,默认值为空字符串
        color: {
            type: String,
            default: '',
        },
    },
    setup(props) {
        return {
            // 计算属性,根据传递进来的 iconClass 生成图标名称
            iconName: computed(() => `#icon-${props.iconClass}`),
            // 计算属性,根据是否有 className 属性来生成 SVG 的类名
            svgClass: computed(() => {
                if (props.className) {
                    return `svg-icon ${props.className}`;
                }
                return 'svg-icon';
            }),
        };
    },
});
</script>
<style scope lang="scss">
.sub-el-icon,
.nav-icon {
    display: inline-block;
    font-size: 15px;
    margin-right: 12px;
    position: relative;
}
.svg-icon {
    width: 1.15em;
    height: 1.15em;
    position: relative;
    fill: currentColor;
    vertical-align: -2px;
}
</style>

(6)main.js配置

import "virtual:svg-icons-register";
import SvgIcon from "@/components/SvgIcon";
import elementIcons from "@/components/SvgIcon/svgicon";app.use(elementIcons);
app.component('svg-icon', SvgIcon);

 

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

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

相关文章

线性电源 单电源供电 正负双路输出 万分之一纹波 高转换效率 输入3~40V,输出线性电压2.5~32V 可调

线性电源 单电源供电 正负双路输出 万分之一纹波 高转换效率 输入3~40V,输出线性电压2.5~32V 可调低纹波双路可调线性电源 宽电压输入输出高转换效率 BSN30WL是一款宽电压输入的升降压、正负电压线性电源。它具有多种应用场景,例如用于精密运放的正负电源、模数和数模转换的供…

提升互联网项目效率!J 人团队必备办公软件有哪些?

前言:在互联网行业这个瞬息万变、竞争激烈的领域,高效的团队协作与个人学习效率是企业和从业者取得成功的关键因素。对于 J 人主导的互联网公司和团队而言,他们对秩序、规划和高效执行的追求,使得可视化团队协作办公软件成为不可或缺的工具。本文将站在 J 人互联网公司的角…

Windows-清除电脑(主文件夹)中“最近使用的文件”(痕迹)

如何清除电脑(主文件夹)中 “最近使用的文件”(痕迹)? (1)在任务栏这里点击 “三个点” 的图表,然后选择 “选项”。 (2)点击 “隐私” 选项卡下的“清除”按钮。 然后点击 “刷新” 按钮,即可清除 “最近使用的文件” 。 (3)设置不记录 “最近使用的文件” 。 第…

OpenHarmony测试RS232/RS485串口方法,触觉智能SBC3528工控主板演示

为大家介绍在鸿蒙系统下,没有串口工具的情况下如何测试RS232/RS485,触觉智能SBC3528工控主板演示教大家介绍在OpenHarmony系统,没有串口工具的情况下如何测试RS232/RS485,使用触觉智能SBC3528工控主板演示,搭载了瑞芯微RK3568四核处理器,板载2路RS232+4路隔离RS485,集成…

天虎程序Phone APP下载设置定位失败怎么解决

天虎程序Phone的APP拨号软件怎么下载呢?首先用浏览器扫描二维码,点击下载,然后按照提示安装就可以,这个非常简单。下载后,点击软件界面按####加拨号连接蓝牙,蓝牙连接好后就可以正常使用了。请联系图片上电话或微心 2081003456 索取下载phone程序APP 定位失败更换APP即可…

Express的使用笔记10 给登录接口添加返回token与其它接口进行token校验处理

按照常规,用户登录成功的时候是会返回一个token值,前端就可以将这个token存储到cookie中随后在其他接口使用的时候放置在Headers中进行传递。 实现这个功能,首先需要了解JWT Secret(密钥)与JWT(Token)。 JWT Secret (密钥):这是一个私有的字符串,仅在服务器端使用。 它…

ingsollrang英格索兰IC直流电动拧紧控制器维修

随着智能装配的概念逐渐在行业内推广,质量管理已成为实现智能装配过程中的一个重要环节,许多客户都有着数据记录、扭矩检测的需求,英格索兰的多种拧紧工具配合控制器,可以满足从基本拧紧到质量管理的一系列需求,真正实现高级装配。 一、ingsollrang英格索兰IC直流电动拧紧…

【笔记】一些简单、基础的东西

一些简单的东西存储大小bit:位,简写为 bbyte:字节,简写为 B;一个字节占 8 位。k:千(1000)K/Ki:千(1024)ASCII10:enter、32:space48:065:A97:a

进阶篇:3.2.3 DFM钣金-弯管件设计

管材最小弯曲半径: 自己生活会变的更开心

X.3 一维梁

X.3 一维梁 一维连续系统 ​​ 本图中,w表示梁在z方向的挠度(deflection,或位移),f表示每单元长度受到的横向力(transverse force),T表示弦(string)受到的张力。 对于一维张紧弦,其控制方程为: \[\begin{equation}T\frac{d^2w}{dx^2}+f\begin{pmatrix}x\end{pmatri…

11.21 每日总结(设计模式)

今天继续设计模式 简单单工厂模式定义:定义了一个创建对象的类,由这个类来封装实例化对象的行为。