【Ant Design of Vue】自定义SVG图标的使用

news2024/9/20 14:57:28

一、需求

由于Ant Design Vue提供的 Icon 图标满足不了项目的需求(需求图标未提供),所以我们使用了自定义的 SVG 图标

二、技术栈

  • 前端框架:vue2 + Vue Cli
  • 前端UI框架:Ant Design of Vue(v1.7.8)

三、方法一

  • vue-svg-loader
  • 这是Ant Design Vue官网的用法

安装依赖

npm i -D vue-svg-loader vue-template-compiler
 # 或
yarn add --dev vue-svg-loader vue-template-compiler

本人使用的依赖版本:

vue-svg-loader@0.16.0
vue-template-compiler@2.6.14

配置vue.config.js

// vue.config.js
module.exports = {
  chainWebpack: config => {
    const svgRule = config.module.rule('svg');
    svgRule.uses.clear();
    svgRule.use('vue-svg-loader').loader('vue-svg-loader');
  },
};

图标使用

<template>
  <div>
     <a-icon :component="bxAnaalyse" />
  </div>
</template>

<script>
// 引入svg代码文件
import bxAnaalyse from '@/assets/icons/bx-analyse.svg';

export default {
 data() {
    return {
      bxAnaalyse,
    };
  },
}
</script>

<style></style>

四、方法二

  • vue-svg-icon-loader
  • vue-svg-component-runtime

安装依赖

npm install --save-dev vue-svg-icon-loader
npm install vue-svg-component-runtime

本人使用的依赖版本:

vue-svg-component-runtime@1.0.1
vue-svg-icon-loader@2.1.1

配置vue.config.js

module.exports = {
  chainWebpack: config => {
    const svgRule = config.module.rule('svg')
    svgRule.uses.clear()
    svgRule
      .oneOf('inline')
      .resourceQuery(/inline/)
      .use('vue-svg-icon-loader')
      .loader('vue-svg-icon-loader')
      .end()
      .end()
      .oneOf('external')
      .use('file-loader')
      .loader('file-loader')
      .options({
        name: 'assets/[name].[hash:8].[ext]'
      })
   },
}

svg图标定义

assets 目录下新建 icons 文件夹,用于存放 svg 文件

<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1551058675966" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7872" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M85.333333 512h85.333334a340.736 340.736 0 0 1 99.712-241.621333 337.493333 337.493333 0 0 1 108.458666-72.96 346.453333 346.453333 0 0 1 261.546667-1.749334A106.154667 106.154667 0 0 0 746.666667 298.666667C805.802667 298.666667 853.333333 251.136 853.333333 192S805.802667 85.333333 746.666667 85.333333c-29.397333 0-55.978667 11.776-75.221334 30.933334-103.722667-41.514667-222.848-40.874667-325.76 2.517333a423.594667 423.594667 0 0 0-135.68 91.264 423.253333 423.253333 0 0 0-91.306666 135.637333A426.88 426.88 0 0 0 85.333333 512z m741.248 133.205333c-17.109333 40.618667-41.685333 77.141333-72.96 108.416s-67.797333 55.850667-108.458666 72.96a346.453333 346.453333 0 0 1-261.546667 1.749334A106.154667 106.154667 0 0 0 277.333333 725.333333C218.197333 725.333333 170.666667 772.864 170.666667 832S218.197333 938.666667 277.333333 938.666667c29.397333 0 55.978667-11.776 75.221334-30.933334A425.173333 425.173333 0 0 0 512 938.666667a425.941333 425.941333 0 0 0 393.258667-260.352A426.325333 426.325333 0 0 0 938.666667 512h-85.333334a341.034667 341.034667 0 0 1-26.752 133.205333z" p-id="7873"></path><path d="M512 318.378667c-106.752 0-193.621333 86.869333-193.621333 193.621333S405.248 705.621333 512 705.621333s193.621333-86.869333 193.621333-193.621333S618.752 318.378667 512 318.378667z m0 301.909333c-59.690667 0-108.288-48.597333-108.288-108.288S452.309333 403.712 512 403.712s108.288 48.597333 108.288 108.288-48.597333 108.288-108.288 108.288z" p-id="7874"></path></svg>

统一加载

新建 icons.js,统一加载所有自定义图标,方便管理

// icons.js
/**
 * 自定义图标加载表
 * 所有图标均从这里加载,方便管理
 */
// https://www.webpackjs.com/configuration/module#ruleresourcequery
// ?inline 与webpack的resourceQuery 有关,删除会报错
import bxAnaalyse from '@/assets/icons/bx-analyse.svg?inline' // path to your '*.svg?inline' file.

export { bxAnaalyse }

Rule.resourceQuery

  • Rule.resourceQuerywebpack 中的一个配置项,用于指定模块的资源类型。
  • 它的作用是在 webpack 编译时,根据指定的资源类型,将符合条件的模块进行处理。
  • 比如,我们可以使用 Rule.resourceQuery 来指定处理以特定后缀名结尾的文件,或者处理特定类型的文件。
  • 这样,可以在 webpack 编译时只对需要处理的模块进行处理,提高编译效率
// 如果不想使用Rule.resourceQuery, 将代码做如下修改即可
import bxAnaalyse from '@/assets/icons/bx-analyse.svg'
export { bxAnaalyse }

// vue.config.js中删除.resourceQuery(/inline/)
module.exports = {
  chainWebpack: config => {
    const svgRule = config.module.rule('svg')
    svgRule.uses.clear()
    svgRule
      .oneOf('inline')
      .use('vue-svg-icon-loader')
      .loader('vue-svg-icon-loader')
      .end()
      .end()
      .oneOf('external')
      .use('file-loader')
      .loader('file-loader')
      .options({
        name: 'assets/[name].[hash:8].[ext]'
      })
   },
}

图标使用

用法一

<template>
  <div>
     <a-icon :component="bxAnaalyse" />
     <a-button type="primary" >
       <a-icon :component="bxAnaalyse" />我是按钮
     </a-button>
  </div>
</template>

<script>
import { bxAnaalyse } from '@/core/icons.js'

export default {
 data() {
    return {
      bxAnaalyse,
    };
  },
}
</script>

<style></style>

用法二

<template>
  <div>
     <bxAnaalyse class="icon"></bxAnaalyse>
  </div>
</template>

<script>
import { bxAnaalyse } from '@/core/icons.js'

export default {
  components: {
    bxAnaalyse,
  },
}
</script>

<style>
.icon {
  width: 1em;
  height: 1em;
}
</style>

区别

用法一单位是 em,用法二是 Number ,所以如果要用法一和用法二显示效果一致,需要手动给用法二设置宽高为 1em

请添加图片描述

遇到的问题

请添加图片描述
解决方案

  • 检查 svg 图标的引入路径是否正确
  • 检查 vue.config.js 配置是否正确
  • 检查是否在 vue.config.js 中配置了 .resourceQuery(/inline/),但是 import 路径中没有添加 ?inline

目录结构

请添加图片描述

五、方法三

  • svg-sprite-loader

  • 参考文章

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

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

相关文章

Python自动化测试,Excel数据驱动读取 xlrd实战(超详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 xlrd模块安装 pi…

JS逆向系列之猿人学爬虫第16题-window蜜罐

文章目录 目标网站参数定位与加密逻辑分析补全后的jspython调用测试往期逆向文章推荐目标网站 https://match.yuanrenxue.cn/match/16参数定位与加密逻辑分析 t就是时间戳,m是我们主要逆向的参数,跟栈进入window

mysql之mha高可用

目录 一、MHA的相关知识 1&#xff09;什么是 MHA 2&#xff09;MHA 的组成 &#xff08;1&#xff09;MHA Node&#xff08;数据节点&#xff09; &#xff08;2&#xff09;MHA Manager&#xff08;管理节点&#xff09; 3&#xff09;MHA 的特点 二、MHA的一主两从部…

Java中创建对象的方式有几种?

使用new关键字 这是最常见也是最简单的创建对象的方式了。通过这种方式&#xff0c;我们可以调用任意的构造函数(无参的和带参数的)。 Student s new Student();2.使用Class类的newInstance方法&#xff08;反射&#xff09; 我们也可以使用Class类的newInstance方法创建对象…

必要条件与充分条件

关于对充分条件、必要条件、充要条件的最简单扼要的理解&#xff1a; 充分条件&#xff1a;有A就一定有B&#xff0c;则A是B的充分条件&#xff1b; 必要条件&#xff1a;无A就一定无B&#xff0c;则A是B的必要条件&#xff1b; 充要条件&#xff1a;有A就一定有B&#xff0…

黑客是怎样练成的

网学黑客技术的人越来越多了&#xff0c;不少人都不知道该怎么学&#xff0c;今天就来详细的说一说黑客是如何炼成的。 首先&#xff0c;什么是黑客&#xff1f; 黑客 &#xff1a;泛指擅长IT技术的电脑高手 黑客一词&#xff0c;源自英文Hacker&#xff0c;早期其实就是一群…

6月27日亚马逊云科技中国峰会议程抢先看

大会亮点预览 ● 汇聚百余位重磅嘉宾共同探路云端 ● 技术分享与发布 赋能数字化转型创新 ● 共同探索行业转型之道 驱动创新价值 ● 聚焦前沿科技 云计算年度热点话题盘点 ● 热点主题展示 打造数字科技创新型展区 ● 开发者专属版块 学玩一体 高效进阶 ● Amazon De…

海外网红营销潜藏的风险:如何规避失败的可能性?

在数字化时代&#xff0c;海外网红营销已成为品牌推广的重要策略。然而&#xff0c;不少企业在海外网红营销中遭遇失败&#xff0c;导致推广效果不佳甚至适得其反。本文Nox聚星将和大家探讨海外网红营销失败的原因&#xff0c;并详细分析其中的关键问题。 1、文化差异 海外网红…

string类学习

本篇将深入学习string类&#xff0c;通过各个测试函数玩遍cstring类&#xff0c;学到就是赚到&#xff01;&#xff01;&#xff01; 文章目录 1.头文件和源文件1.1源文件1.2头文件 2.构造函数3.赋值重载函数4.元素访问运算符5.迭代器5.1正向迭代器5.2反向迭代器 6.添加字符串…

github本地修改后不想提交

本地做了修改后&#xff0c;不想提交&#xff0c;想恢复如初&#xff0c;如果直接git reset --hard 会提示你本地还有没暂存的文件。 所以可以先暂存&#xff0c;然后再回退

Linux ~ NFS 文件共享

Ubuntu 下载nfs服务软件包 sudo apt-get install nfs-kernel-server配置nfs vim /etc/exports表头表头/mnt/*指示要共享的目录*代表允许所有的网络段访问rw指示具有可读写的权限sync指示资料同步写入内存和硬盘no_root_squash客户端分享目录使用者的权限 启动rpcbind服务 …

Databend 开源周报 第 99 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 Flink CDC Apa…

【AudioCaps数据集】windows10下载AudioCaps数据集,附百度网盘下载链接

&#x1f525; AudioCaps是从AudioSet数据集中筛选再加工得到的数据集。 AudioCaps数据集的下载使用python的第三方库 audiocaps-download&#xff0c;根据README.md的提示&#xff0c;先进行配置下载环境&#xff1a; &#x1f4e3; AudioCaps的下载环境配置分为四步&#x…

Windows 10, version 22H2 (updated Jun 2023) 中文版、英文版下载

Windows 10, version 22H2 (updated Jun 2023) 中文版、英文版下载 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Windows 10 更新历史记录 Windows 10, ver…

解决vue依赖报错SockJSServer.js出现Cannot read property ‘headers‘ of null

前言 在做新的需求需要变更vue的项目代码时突然出现报错 TypeError: Cannot read property ‘headers’ of null at Server.socket.on (***/node_modules/webpack-dev-server/lib/servers/SockJSServer.js:68:32) 不清楚为什么突然出现了这个问题&#xff0c;之前在这个vue项目…

8.9 实现UDP通信

目录 write/read到send/recv 函数原型&#xff1a; 常见flags: sendto与recvfrom UDP通信的实现过程 服务器端代码、 客户端代码 Makefile write/read到send/recv 函数原型&#xff1a; ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t …

最优化方法(基于lingo)之 目标规划问题求解(6/6)

一、实验目的&#xff1a; 1. 练习建立实际问题的多目标规划模型。 2. 掌握用数学软件求解多目标规划的方法。 3. 实验从算法思想、实验步骤与程序、运行结果、结果分析与讨论等几方面完成。 4. 预习多目标规划的理论内容。 二、实验内容 题目&#xff1a; 建立模型并求解&…

一篇文章告诉你,全网爆款抓包工具的优劣势

前言 作为软件测试工程师&#xff0c;抓包总是不可避免&#xff1a;遇到问题要做分析需要抓包&#xff1b;发现 bug 需要定位要抓包&#xff1b;检查数据传输的安全性需要抓包&#xff1b;接口测试遇到需求不全的也需要抓包... 就因为抓包在测试工作中无处不在&#xff0c;所以…

TuyaOS 开发固件OTA配置指南

文章目录 一、固件升级配置升级信息设置配置中英文升级文案配置发布范围固件升级验证 二、固件升级发布 通过TuyaOS接入涂鸦云的产品全部默认支持固件OTA功能&#xff0c;TuyaOS设备实现固件OTA需要&#xff1a; 自定义产品创建TuyaOS嵌入式开发固件上传固件OTA配置与发布 等步…

PMP知识点汇总完善版,2023年8月考试就靠它了

第1章 整体管理 1.1 制定项目章程 是制定一份正式批准项目或阶段的文件&#xff0c;并记录能反应干系人需要和期望的初步要求的过程。由项目以外的人员批准&#xff0c;如发起人&#xff0c;批准标志项目的正式启动。 1.1.1 知识点汇总 1、由项目以外的人员批准&#xff0c;如…