IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue3+ts+vite+ant环境中Icon自定义图标处理方案:SvgIcon -> 正文阅读

[JavaScript知识库]vue3+ts+vite+ant环境中Icon自定义图标处理方案:SvgIcon

在vue项目中,我们除了使用组件库(ant-design-vue element-ui)的icon以外,还有我们自己自定义的图标,对于自定义图标的话,我们暂时还缺少显示的方式。所以说我们需要一个自定义的组件,来显示我们自定义的?svg?图标。

我们用的iconfont里的图标 有的会用线上的图标,直接调用,但是会出现 如果线上服务器崩了,我们的图标是不是也都不显示了,这里我们一般都是把图标下载下来。

这里目前推荐下载svg格式的图标。

1,首先去官网下载自己需要的icon图标,注意是svg格式的??iconfont-阿里巴巴矢量图标库

2,将下载下来的图标放置到项目中专门放图片的文件夹中,可以单独放一个svg目录中

一、安装vite-plugin-svg-icons

此处还需要安装下fast-glob相关依赖,不然vite运行时会报Cannot find module 'fast-glob’的错误,

如果npm安装的就这么安装

npm i vite-plugin-svg-icons -D
npm i fast-glob@3.x -D

如果是yarn下载环境的,使用ant组件库的项目,就要这么安装,这里fast-glob@3.x用npm安装,亲测用yarn安装就报错,npm安装就可以

yarn add vite-plugin-svg-icons -D
npm i fast-glob@3.x -D

二、在src/components/svgIcon下新建组件svgIcon.vue

<template>
  <svg aria-hidden="true" :class="svgClass">
    <use :xlink:href="symbolId" :fill="props.color" />
  </svg>
</template>

<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
  name: 'svg-icon'
})
</script>
<script lang="ts" setup>
import { computed } from 'vue'
const props = defineProps({
  prefix: {
    type: String,
    default: 'icon'
  },
  name: {
    type: String,
    required: true
  },
  color: {
    type: String,
    default: '#333'
  },
  className: {
    type: String,
    default: ''
  }
})
const symbolId = computed(() => `#${props.prefix}-${props.name}`)
const svgClass = computed(() => {
  if (props.className) {
    return `svg-icon ${props.className}`
  }
  return 'svg-icon'
})

</script>

<style>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.1em;
  /* 因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果 */
  fill: currentColor;
  /* 定义元素的颜色,currentColor是一个变量,这个变量的值就表示当前元素的color值,如果当前元素未设置color值,则从父元素继承 */
  overflow: hidden;
}
</style>

三、在main.ts全局注册组件

import { createApp } from 'vue'
import App from './App.vue'
import router from '@/router'
import { store, key } from '@/store'
import 'virtual:svg-icons-register' // 引入注册脚本
import SvgIcon from '@/components/svgIcon/index.vue' // 引入组件
const app = createApp(App)
app.component('svg-icon', SvgIcon)
app.use(router).use(store, key).mount('#app')

四、vite.config.ts 中的配置插件

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from "path"

export default defineConfig({
  ?plugins: [
? ? vue(),
? ? createSvgIconsPlugin({
? ? ? // 指定需要缓存的图标文件夹
? ? ? iconDirs:[path.resolve(process.cwd(),'src/assets/icons')],
? ? ? // 指定symbolld格式
? ? ? symbolId: 'icon-[dir]-[name]' 
? ? })
? ],
})

五、在页面中使用

<svg-icon name="del" className="my" color="green" />

name为svg文件名称,比如调用 del.svg,这里name就为del,className则为样式调用,这里的my的样式可以写在调用该组件的页面中,color控制颜色

六、在后台管理页面中,控制svg图标显示

在后台管理中,有的菜单需要不同的图标,但是在项目中是统一循环出来的,不好一个一个手动设定,比如这样的

?不同的菜单不同的图标,这个时候可以在添加菜单的时候,加上一个字段button名称字段,填写svg名称,在调用菜单的时候,返回这个字段,然后在<svg-icon name="del" className="my" color="green" />中调用

?

<a-sub-menu :key="menuInfo.name" v-if="!menuInfo.hidden">
        <template #icon v-if="menuInfo.meta" >
          <svg-icon v-if="menuInfo.meta.icon" :name="menuInfo.meta.icon"  className="menuIcon" /> 
          <svg-icon v-else name="type"  className="menuIcon" />
        </template>
        <template #title>{{ menuInfo.meta.title || menuInfo.title }}</template>
        <template v-for="item1 in menuInfo.children" :key="'nav' + item1.name" >
          <nav-menu :menu-info="item1"  />
        </template>
    </a-sub-menu>

这里就是项目中的部分代码,svg的name就是调用的后台传过来的值,通过这个值来显示不同的图标

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:34:49  更:2022-08-06 10:38:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:40:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码