vue3项目中引入阿里图标库

开篇

本篇的主题是在vue3项目中引入阿里图标库

步骤

注册阿里图标库账号(阿里图标),并创建项目

将图标加入项目中

  • 将需要的图标先加入购物车,随后加入到项目中

生成项目代码

在项目中生成项目代码,便于后续复制到vue项目中
## 在vue3项目中配置

  • 在App.vue中引入阿里图标库通用样式(只需要引入一次)
typescript 复制代码
// 阿里图标库通用样式
.icon {
    width: 1em;
    height: 1em;
    vertical-align: -0.15em;
    fill: currentColor;
    overflow: hidden;
}
  • 在main.ts或main.js中,引入刚刚生成的项目代码
  • 按照需用封装一个通用的图标组件
typescript 复制代码
<template>
  <div v-if="isColorIcon || isSvgIcon">
    <svg :style="setIconSVGStyle" aria-hidden="true" class="icon">
      <use :xlink:href="'#icon-' + name"></use>
    </svg>
  </div>
  <i v-else :class="getIconName" :style="setIconSvgStyle"/>
</template>

<script lang="ts" name="svgIcon" setup>
import {computed} from 'vue';

// 定义父组件传过来的值
const props = defineProps({
  // svg 图标组件名字
  name: {
    type: String,
  },
  // svg 大小
  size: {
    type: Number,
    default: () => 14,
  },
  // svg 颜色
  color: {
    type: String,
  },
  //彩色
  colorIcon: {
    type: Boolean,
    default: false,
  },
  // 是否是阿里图标库
  isSvg: {
    type: Boolean,
    default: false,
  }
});

// 在线链接、本地引入地址前缀
// https://gitee.com/lyt-top/vue-next-admin/issues/I62OVL
const linesString = ['https', 'http', '/src', '/assets', 'data:image', import.meta.env.VITE_PUBLIC_PATH];

// 获取 icon 图标名称
const getIconName = computed(() => {
  return 'iconfont icon-' + props?.name;
});
// 用于判断 element plus 自带 svg 图标的显示、隐藏
const isShowIconSvg = computed(() => {
  return props?.name?.startsWith('ele-');
});
// 用于判断在线链接、本地引入等图标显示、隐藏
const isShowIconImg = computed(() => {
  return linesString.find((str) => props.name?.startsWith(str));
});
// 设置图标样式
const setIconSvgStyle = computed(() => {
  return `font-size: ${props.size}px;color: ${props.color};`;
});
// 设置图片样式
const setIconImgOutStyle = computed(() => {
  return `width: ${props.size}px;height: ${props.size}px;display: inline-block;overflow: hidden;`;
});
// 设置图片样式
// https://gitee.com/lyt-top/vue-next-admin/issues/I59ND0
const setIconSvgInsStyle = computed(() => {
  const filterStyle: string[] = [];
  const compatibles: string[] = ['-webkit', '-ms', '-o', '-moz'];
  compatibles.forEach((j) => filterStyle.push(`${j}-filter: drop-shadow(${props.color} 30px 0);`));
  return `width: ${props.size}px;height: ${props.size}px;position: relative;left: -${props.size}px;${filterStyle.join('')}`;
});

const setIconSVGStyle = computed(() => {
  return `width: ${props.size}px;height: ${props.size}px;display: inline-block;overflow: hidden;`;
});
//是否是彩色图标
const isColorIcon = computed(() => {
  
  return props.colorIcon;
});
// 是否是阿里图标库
const isSvgIcon = computed(() => {
  
  return props.isSvg;
});
</script>
  • 在项目中使用该组件渲染图标
typescript 复制代码
<SvgIcon :isSvg="true" :name="'row'"></SvgIcon>
  • 效果如下:

注

值得一提的是,如果更新了项目中的图标,那么就需要更新图标项目的链接,并复制到vue3项目中。

感谢阅读!

相关推荐
小宋10213 小时前
A2UI从零实战:Agent安全生成交互界面与事件回传
javascript·人工智能·安全·交互
大包子3 小时前
structuredClone vs lodash.cloneDeep:核心差异与选型指南
javascript·vue.js
lerhxx4 小时前
AI 应用中的上下文管理 —— 从"上下文窗口"到"分层压缩"的工程实践
前端·javascript
Mahut4 小时前
我在 Mac 上做了个本地剪辑器
javascript·架构·产品
汉堡大王95274 小时前
GPT-6 上线 48 小时,我扒开了 Intelligent UI 的运行机制:DIL、沙箱 Worker 和一个 React 式协调器
前端·javascript·后端
hai_android4 小时前
Chat 聊天模块功能总结
前端·javascript·vue.js
创世虚拟世界5 小时前
我做了一个 3D 虚拟世界基底,基于这个再做 3D 虚拟世界或者元宇宙,会事半功倍
javascript·人工智能·3d·gitee·虚拟现实
Highcharts.js6 小时前
用Highcharts开发动态主从图表|双图联动的时间序列图表示例
javascript·数据库·信息可视化·highcharts·图表开发·动态图表
志尊宝7 小时前
Vue3 零基础每日笔记(076):防抖节流的正确使用——搜索框、按钮防重复提交、滚动监听
javascript·vue.js·笔记