首页 > 其他分享 >在vue中使用svg

在vue中使用svg

时间:2023-08-26 23:33:31浏览次数:43  
标签:vue icons svg loader 使用 SvgIcon icon

背景

svg作为矢量图,放大不失真,但是如果在vue文件中直接引入svg的话会导致vue文件过长,不友好。想要在组件中使用的时候使用下面的方式来引入svg

// svg-name的值就是svg图片的名称
<svg-icon svg-name="xueren" />

步骤

  1. components下创建SvgIcon.vue文件,并引入assets/icons/svg目录下的所有svg
<!-- svg组件 -->
<template>
  <svg class="svg-icon" :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName" />
  </svg>
</template>

<script>
// https://webpack.docschina.org/guides/dependency-management/#requirecontext
const requireAll = (context) => context.keys().map(context);
// webapck提供的API: 获取某个路径下的所有匹配的资源
// 参数1:要搜索的目录,
// 参数2:是否需要搜索子目录
// 参数3:匹配的正则表达式
const req = require.context("../assets/icons/svg", false, /\.svg$/);
requireAll(req);
export default {
  name: "SvgIcon",
  props: {
    // svg 的名称
    svgName: {
      type: String,
      required: true,
    },
  },
  computed: {
    iconName() {
      return `#icon-${this.svgName}`;
    },
    svgClass() {
      if (this.svgName) {
        return "svg-icon" + this.svgName;
      } else {
        return "svg-icon";
      }
    },
  },
};
</script>

<style scoped>
.svg-icon {
  width: 100px;
  height: 100px;
  fill: currentColor;
  overflow: hidden;
}
</style>

  1. 将SvgIcon.vue 组件注册为全局组件
    main.js
import SvgIcon from "@/components/SvgIcon.vue";
// 注册到全局
Vue.component("svg-icon", SvgIcon);
  1. 使用svg-sprite-loader loader对svg进行处理,配置vue.config.js
    vue.config.js
const { defineConfig } = require("@vue/cli-service");
const path = require("path");
module.exports = defineConfig({
  transpileDependencies: true,
  chainWebpack: (config) => {
    config.module
      .rule("svg")
      .exclude.add(path.resolve("src/assets/icons"))
      .end();
    config.module
      .rule("icons")
      .test(/\.svg$/)
      .include.add(path.resolve("src/assets/icons"))
      .end()
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      })
      .end();
  },
});

  1. 组件中的使用
 <svg-icon svg-name="xueren" />
 <svg-icon svg-name="touxiang" />

最终效果:

总结

svg-sprite-loader 会将加载的svg定义成symbol 汇聚到一个 元素中添加到body中,这样的话 , 我们局部定义svg引用对应的symbol , 通过use标签引用资源.

参考资源

标签:vue,icons,svg,loader,使用,SvgIcon,icon
From: https://www.cnblogs.com/it774274680/p/17659698.html

相关文章

  • pycharm中,ideolog插件的使用方法
    我们在pycharm打印日志时,为了更方便的通过查看日志,需用通过不同改的颜色反应不同级别的日志内容我们可以使用ideolog插件来实现这种效果一、插件下载Settings-Plugins中,搜索ideolog,并安装 二、配置ideolog下载完成插件后,打开一个我们的日志文件,可以点击Configurelogform......
  • 动态库(共享库)的制作和使用
    共享库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入.不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的拷贝,规避了空间浪费问题.动态库在程序运行时才被载入,也解决了静态库对程序的更新、部署和发布会带来麻烦.用户只需要更新动态库......
  • vue--day70---搭建vuex 环境
    [email protected](Vuex)3.store4.vc==>store5.vue2中只能使用vuex的3版本  vue3中只能使用vuex的4版本6.store/index.js//改文件用于创建vuex最为核心的storeimportVuefrom'vue'//引入vueximportVuexfrom'vuex'Vue.use(Vuex)......
  • Postgresql 批量插入命令COPY使用
    在很多场景下,我们经常会遇到将某个Excel或Csv文件中的数据,插入到Postgresql。对于这个需求,我们常规的处理办法就是将文件中的数据,按照文件表头名称转换成集合对象然后插入到数据库,当然这对于数据体量不大的文件而言,很显眼没有任何问题,但是如果数据体量一旦上来,将面临如下问题:将......
  • 标题:在Godot中使用Node2D创建自定义的Label
    在Godot游戏引擎中,我们经常需要在游戏中显示文本信息。通常,我们可以使用Label节点来实现这一点。但是,在某些情况下,你可能希望更灵活地控制文本的显示和样式。在本篇博客中,我们将学习如何通过使用Node2D节点来创建一个自定义的Label,从而能够更好地控制文本的呈现方式。效果图步......
  • vue npm install报错
    PSI:\Vue3+ts+e-plus后台管理\vue3-ts-element-plus-master\vue3-ts-element-plus-master>npminstallnpmERR!codeERESOLVEnpmERR!ERESOLVEcouldnotresolvenpmERR! npmERR!Whileresolving:[email protected]!Found:[email protected]!node_......
  • vue 错误
    npmERR!Conflictingpeerdependency:[email protected]!node_modules/vuenpmERR! peervue@"^3.2.0"from@element-plus/[email protected]! node_modules/@element-plus/icons-vuenpmERR!  @element-plus/icons-vue@"^2.1.0"fromth......
  • 【LeetCode回溯算法#12】二叉树的直径,树形dp的前置内容(使用dfs)
    二叉树的直径给你一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点root。两节点之间路径的长度由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取路径[4,2,1,3]或......
  • 观察者模式的简单使用
    定义观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。观察者模式中有两个角色,一个是主题(Subject),一个是观察者(Observer)。观察者会观察主题,当主题发生了变化,观察者会做出相应的处理。主题跟观察者的关系是一对多。观察者模式也......
  • 在移动硬盘上安装Win11系统(不使用工具)
    一、准备镜像文件1、前往官网下载Win11镜像文件。Win11官网:DownloadWindows11(microsoft.com)2、装载Win11镜像找到Win11镜像。右键点击装载之后再此电脑里面就能看见一个DVD驱动器,记住这个驱动器的盘符,这里为F盘。二、划分分区1、选择磁盘按Windows键+R键打开运行,输......