高版本ant-design动态引用icon

需求

最近在更新自己的博客系统,从 vue2 升到 vue3,同步的也把 ant-design 从 1.7.8 跨越多个大版本升级到了 4.0.8,发现菜单上的 icon 报错了。

查询官方文档发现自从 2.0 版本以后的 icon 就不再支持通过 <a-icon /> 组件动态 type 的方式引入 icon 了。

但是目录这个部分不可能是写死的 icon。

解决方案

下载 ant-design/icons-vue 项目发现所有的图标都作为导出出现在项目中,故使用 import * 的方式进行全部引入,再通过动态组件的方式进行加载即可。

使用方法

javascript 复制代码
<Icon type="HeartTwoTone" two-tone-color="#eb2f96"/>
<Icon type="check-circle-two-tone" two-tone-color="#52c41a" style="font-size: 20px" :spin="true"/>

API

  1. 支持"大驼峰式"组件写法
  2. 支持"短横线"分隔组件写法
  3. 支持 rotate【图标旋转角度】
  4. 支持 spin 【是否有旋转动画】
  5. 支持 style 【设置图标的样式】
  6. 支持 twoToneColor 【仅适用双色图标。设置双色图标的主要颜色】

组件源码

javascript 复制代码
<script setup>
import {computed, defineProps} from "vue";
import * as icons from "@ant-design/icons-vue";

const props = defineProps({
    // icon图标名称
    type: {
        type: String,
        default: 'FireOutlined'
    }
});

/** 转化icon名称 */
const iconName = computed(() => {
    if (!props.type.includes("-")) {
        return props.type;
    }
    return props.type.charAt(0).toUpperCase() + props.type.slice(1).replace(/-([a-z])/g, function (g) {
        return g[1].toUpperCase();
    });
});
</script>

<template>
    <component :is="icons[iconName]" v-bind="$attrs"></component>
</template>

注意:仅支持 ant-design 原生的图标,而且仅是 icon 图标,不包含 svg 图标,不支持 iconfont。

相关推荐
广州灵眸科技有限公司3 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) Easy-Eai编译环境准备与更新
服务器·前端·人工智能·python·深度学习
万少4 小时前
我把 Kimi 接进微信,几分钟做了个随手出图助手
前端
xiaofeichaichai5 小时前
网络请求与实时通道
前端·网络
kTR2hD1qb5 小时前
从 Responses API 到 Chat Completions:一个模型网关的设计复盘
linux·前端
kyriewen6 小时前
浏览器缓存最强攻略:强缓存、协商缓存、CDN、更新策略,一篇搞定
前端·面试·浏览器
持敬chijing7 小时前
Web渗透之SQL注入-联合查询注入-注入点数据类型判断
前端·sql·安全·web安全·网络安全·安全威胁分析
卷帘依旧7 小时前
Web3前端一面
前端
古韵7 小时前
告别手写分页逻辑:usePagination 从 50 行到 3 行
java·前端
小村儿7 小时前
连载12- Cluade code 的MCP 到底还用不用
前端·后端·ai编程