vue3中svg图标的封装与使用

news/2024/9/1 3:25:00 标签: vue.js, javascript, ecmascript

组件封装:

<template>
  <svg :class="svgClass" :style="{ width: size + 'px', height: size + 'px', color: color, verticalAlign:deviation+'em'}" aria-hidden="true">
    <use :xlink:href="`#icon-${name}`" />
  </svg>
</template>

<script>
export default {
  name: 'svg-icon',
  props: {
    name: { type: String, required: true },     // svg 图标名称
    className: { type: String, default: '' },   // 指定的类样式
    size: { type: Number, default: 28 },        // 图标尺寸
    color: { type: String, default: "#000" }, // 图标颜色
    deviation:{type:Number,default:-0.2} //图标上下偏移量
  },
  computed: {  // 计算属性
    svgClass () {
      if (this.className) {
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    }
  }
}
</script>

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

svg图标存放目录:
在这里插入图片描述
index.js获取svg文件

// 获取当前目录所有为.svg的文件
const req = require.context('./svg', false, /\.svg$/)

// 解析获取的.svg文件的文件名称并返回
const requireAll = (requireContext) =>{
  return requireContext.keys().map(requireContext)
}
requireAll(req)

vue.config中定义svg图标目录

const {defineConfig} = require('@vue/cli-service')
const path = require('path')
const resolve = (dir) => path.join(__dirname, dir)
module.exports = defineConfig({
    transpileDependencies: true,
    chainWebpack(config) {
        config.module
            .rule('svg')
            .exclude.add(resolve('src/assets/icons'))  // 存放 svg 目录的目录
            .end()
        config.module
            .rule('icons')
            .test(/\.svg$/)
            .include.add(resolve('src/assets/icons'))  // 存放 svg 目录的目录
            .end()
            .use('svg-sprite-loader')
            .loader('svg-sprite-loader')
            .options({
                symbolId: 'icon-[name]'
            })
            .end()
    },
    ......
    }

页面中的使用:

<svg-icon name="wode" :size="25"/>

http://www.niftyadmin.cn/n/5544415.html

相关文章

收藏!2024年程序员的实用神器_new relic idea

前言 Chat GPT的升级节奏让人们越来越惊讶的同时&#xff0c;也让大家感觉到了压力&#xff0c;在如此快节奏的互联网世界中&#xff0c;开发人员需要不断学习与更新知识&#xff0c;保持领先地位并高效地交付高质量软件。 无论是集成开发环境 (IDE)、版本控制系统、测试工具…

Andoird 14 15分表对应的字母代号是多少?

Android 14和Android 15分别对应的字母代号如下&#xff1a; Android 14&#xff1a; 字母代号&#xff1a;U代号全称&#xff1a;Upside Down Cake&#xff08;倒置蛋糕&#xff09;说明&#xff1a;Android 14的内部开发代号为Upside Down Cake&#xff0c;简称“U”。这个代…

Nginx:location配置模块的用法

运维系列 Nginx&#xff1a;location配置模块的用法 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.c…

用QFramework重构飞机大战(Siki Andy的)(下02)(06-0? 游戏界面及之后的所有面板)

用QFramework重构飞机大战(Siki Andy的)&#xff08;下02&#xff09;&#xff08;06-0&#xff1f; 游戏界面及之后的所有面板&#xff09; GitHub // 官网的 全民飞机大战&#xff08;第一季&#xff09;-----框架设计篇&#xff08;Unity 2017.3&#xff09; 全民飞机大战&…

用 MATLAB Function 模块在 Simulink 中实现 MATLAB 函数

MATLAB Function 模块使您能够使用 MATLAB 语言在 Simulink 模型中定义自定义函数。MATLAB Function 模块支持从 Simulink Coder 和 Embedded Coder生成 C/C 代码。 在以下情况下使用这些模块&#xff1a; 您有现有 MATLAB 函数可用于对自定义功能进行建模&#xff0c;或您可…

【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能

author: bbxwg system_version: Ubuntu 22.04 Time : 2024-07-04 目录 技术简单讲解&#xff1a; UDP (User Datagram Protocol) 链表 父子进程 信号 基于UDP的即时聊天室系统&#xff1a;客户端与服务器端实现 客户端操作步骤 服务器端操作步骤 系统版本&#xff…

ECMAScript 6 新特性下篇

ECMAScript 6 新特性续 对象字面量增强 ES6中的对象字面量增强是一种简化对象创建的语法,它可以让我们更方便地定义对象的属性和方法。下面是对ES6对象字面量增强的详细解析与代码示例。 1、简洁属性名 在ES6之前,我们在定义对象属性时,需要将属性名和属性值都写出来。…

CC4利用链分析

我的Github主页Java反序列化学习同步更新&#xff0c;有简单的利用链图 分析版本 Commons Collections 4.0 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 在Commons Collections 4.0中&#xff0c;TransformingComparator类变为可序列化类&#xff0c;增…