vue使用svg自定义icon图标

2023-10-26

1. 安装 svg-sprite-loader

svg-sprite-loader 是用于创建SVG精灵图的Webpack加载程序,通过该插件可以将导入的SVG文件自动生成为symbol标签并插入进html中。安装语句如下:

npm install svg-sprite-loader --save-dev

2. components文件下新建SvgIcon组件

 index.vue的内容如下:

<template>
  <div
    v-if="isExternal"
    :style="styleExternalIcon"
    class="svg-external-icon svg-icon"
    v-on="$listeners"
  />
  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="iconName" />
  </svg>
</template>

<script>
export default {
  name: "SvgIcon",
  props: {
    iconClass: {
      type: String,
      required: true,
    },
    className: {
      type: String,
      default: "",
    },
  },
  computed: {
    isExternal() {
      return /^(https?:|mailto:|tel:)/.test(this.iconClass);
    },
    iconName() {
      return `#icon-${this.iconClass}`;
    },
    svgClass() {
      if (this.className) {
        return "svg-icon " + this.className;
      } else {
        return "svg-icon";
      }
    },
    styleExternalIcon() {
      return {
        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
        "-webkit-mask": `url(${this.iconClass}) no-repeat 50% 50%`,
      };
    },
  },
};
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}

.svg-external-icon {
  background-color: currentColor;
  mask-size: cover !important;
  display: inline-block;
}
</style>

3. 在src文件夹下新建icons文件夹

在icons新建svg文件夹用于存放svg图片,再新建index.js

index.js内容如下:

import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component

// register globally
Vue.component('svg-icon', SvgIcon)

const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

4. 在main.js中引入icon

5. 配置vue.config.js

以前旧版本是在webpack.base.conf.js中配置的,但vue-cli 升级成3.0以上版本webpack.base.conf.js就没有了。现在在vue.config.js中配置效果一样,代码如下图:

const path = require('path');

function resolve(dir) {
  return path.join(__dirname, dir);
}

module.exports = {
  chainWebpack(config) {
    // set svg-sprite-loader
    config.module
      .rule('svg')
      .exclude.add(resolve('src/icons'))
      .end();
    config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(resolve('src/icons'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      })
      .end();
  }
};

6. 使用

如下图,直接使用<svg-icon /> 在icon-class赋值svg图标的名称即可

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue使用svg自定义icon图标 的相关文章

随机推荐

  • 【偷偷卷死小伙伴Pytorch20天-day16-损失函数】

    最近这几天忙着开学返校的事情 终于几番周折回到了学校 继续pytorch的学习打卡 一般来说 监督学习的目标函数由损失函数和正则化项组成 Objective Loss Regularization Pytorch中的损失函数一般在训练模型时
  • 服务器 文件类型,linux服务器支持的文件类型

    linux服务器支持的文件类型 内容精选 换一换 弹性云服务器卸载磁盘 弹性云服务器状态为stopped时支持系统盘 也就是 dev sda挂载点 和用户盘的卸载 没有操作系统限制 也不需要在弹性云服务器内部安装vmtools 弹性云服务器
  • 【深度解析→博文总结】李宏毅机器学习2023作业01Regression(COVID-19 Cases Prediction)

    文章目录 系列文章 简要说明 视频分享 作业详情 调参记录 Simple Baseline 1 96993 Medium Baseline 1 15678 Strong Baseline 0 92619 Boss Baseline 0 81
  • Seata1.2.0配置及分布式事务失效解决

    配置 版本说明 springCloud Alibaba组件版本关系 我用的是 cloud Alibaba 2 2 1 RELEASE springboot 2 2 5 RELEASE nacos 1 2 1 seata1 2 0 1 配置数
  • booth算法

    booth算法 1 booth算法定义 2 二进制乘法过程 3 二进制乘法转换成 booth乘法运算 4 Radix 2 Booth乘法器 5 Radix 4 Booth乘法器 6 Booth乘法器计算实例 1 booth算法定义 将乘数看
  • 【CV】图像分类中的细粒度/粗粒度怎么理解

    粗粒度图像分类 类别之间差异大 比如人 汽车 树 细粒度图像分类 类别之间差异小 比如200种鸟的分类 100种花的分类 由于细粒度类别属于同一个大类 所以各类别之间的差距很小 这些细微的差距容易被光照 颜色 背景 形状和位置等变化因素覆盖
  • Python作图——numpy库和matplotlib库

    一 numpy库 1 1概述 numpy是一个存储和处理多维数组 矩阵等的库 提供多种关于数组运算的数学函数 可供直接调用 1 1 1数据类型 numpy的数据类型包括整型 浮点型 复数型 布尔型等 在IDLE查询numpy支持的数据类型
  • MATLAB .dat读、存及简单处理

    文章目录 0 前言 1 思路 2 MATLAB 3 结语 0 前言 近期接触到二进制文件 dat 写一个简单的教程 假设文件内容为连续的通信数据 含有不符合的数据 对其进行简单剔除 1 思路 假设输入 dat文件共有3个整帧数据 每帧长度5
  • 机器学习(归一化、去中心化、标准化)

    为什么要进行数据的预处理 这需要分两种情况说明 1 数据数值很大 2 数据数值很小 1 首先 对于一个数值非常之大的特征 T 若其数值非常之大 区间也非常之大 例如区间范围为 10 10 10 20 以线性拟合函数举例 显然我们在进行机器学
  • Android:JNI调用C++自定义类的详细方法

    一般情况下 我们都是用 JNI 调用 C 的某个方法的代码 包括直接使用 android studio 生成的代码也是如此 但有时我们需要新建 或者得到的是 C 的一个自定义类 在调用时就不能像调用 C 方法那样了 查阅了一部分其他人的博客
  • 学习笔记五:电路设计需要注意的那些事

    注意One part 电路中电源VBAT须要先经过滤波电容再到芯片的VBAT引脚 芯片时钟端走线尽量不要靠近电源走线 避免对电源走线产生纹波的干扰 需要隔离地处理 天线走50欧姆的阻抗设计 走线两侧距离30mil处添加过孔 最好用第三层GN
  • Adobe MAX 2020:最新版Photoshop提供AI智能神经滤镜及天空替换等功能

    数据猿年度重磅活动预告 2020年度金猿策划活动 金猿榜单发布 金猿奖杯颁发 即将推出 尽情咨询期待 大数据产业创新服务媒体 聚焦数据 改变商业 数据报道 受新冠疫情影响 今年的Adobe MAX 2020 于北京时间10月21日改为了线上
  • 一个优秀的程序员真的能顶10个普通的程序员吗?

    一个优秀的程序员真的能顶10个普通的程序员吗 一 前言 优秀的程序员 比糟糕的程序员的工作产出高100倍 二 糟糕程序员会有哪些表现 1 无法对代码进行推理 2 没有补救措施 3 代码难以改动 三 优秀程序员是怎么做的呢 1 先进行实验是他
  • Java+SSM+Vue 毕业设计 游戏攻略资讯补丁售卖商城(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 3 系统结构设计 4 项目获取 1 项目简介 Hi 各位同学好呀 这里是M学姐 今天向大家分享一个今年 2022 最新完成的毕业设计项
  • Win32学习笔记(16)消息类型

    1 消息的产生与处理流程 如上图 我们在创建窗口程序中详细介绍了这张图 比如 我们点击某个窗口的时候就会产生消息 操作系统会先判断这个消息是点在了哪个窗口 找到窗口后 会根据窗口对象中的一个成员找到窗口是属于哪个线程的 找到后就会把他封装好
  • 从零开始搭建一个 React 项目 -- 配置篇(一)

    从零开始搭建一个 React 项目 配置篇 一 参考资源 从零搭建完整的React项目模板 Webpack React hooks Mobx Antd 1 项目初始化及常用以来安装配置 1 创建名为 react admin demo 的目录
  • python虚拟环境配置、Python代码打包成exe可执行文件

    背景 因工作需要 要打包一些脚本使其成为exe文件 方便未安装python环境的电脑运行脚本 但是直接使用默认环境的话 会有很多的包 但是其实这个脚本根本用不到 导致生成的exe文件很大或者直接打包失败 所以创建一个虚拟环境 只安装该代码需
  • socket套接字,粘包问题

    目录 scoket套接字 socket工作流程 TCP服务端 TCP客户端 基于TCP 的SOCKET服务端与客户端 基础版本 客户端 加入连接循环 加入通信循环 支持并发的TCP服务端 常见问题 半连接池 粘包问题 TCP协议的特点 解决
  • OpenAI开源!!Whisper语音识别实战!!【环境配置+代码实现】

    目录 环境配置 代码实现 实现 mp4转换为 wav文件 识别后进行关键词匹配并输出关键词出现的次数 完整代码实现请私信 环境配置 安装 ffmpeg 打开网址 https github com BtbN FFmpeg Builds rel
  • vue使用svg自定义icon图标

    1 安装 svg sprite loader svg sprite loader 是用于创建SVG精灵图的Webpack加载程序 通过该插件可以将导入的SVG文件自动生成为symbol标签并插入进html中 安装语句如下 npm insta