高版本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。

相关推荐
噢,我明白了12 小时前
表单的完整 CRUD 练习【极简个人记账本】(含前端后端链接mySQL)
java·前端·数据库·mysql
幽络源小助理12 小时前
MacCMSPro版视频影视系统源码_全开源高可用视频平台解决方案
前端·php·php源码
不会敲代码118 小时前
手写 Zustand:三十分钟带你搞懂状态管理库的核心原理
前端·javascript·源码
神奇的程序员18 小时前
重构了自己5年前写的截图插件
前端·javascript·架构
UXbot20 小时前
一人独立交付 UI + 前端:AI 驱动 UI 设计工具的五大功能模块深度评测
前端·低代码·ui·设计模式·交互
kobesdu20 小时前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2
诚实可靠王大锤20 小时前
React Native 输入框与按钮焦点冲突解决方案(rn版本0.70.3)
前端·javascript·react native·react.js
kyriewen20 小时前
测试妹子让我写单测,我偷偷用AI一天干完一周的活
前端·chatgpt·cursor
2601_9577808420 小时前
Claude Code 2026年最新部署指南:从环境搭建到技能扩展
前端·人工智能·ai编程·claude
zhangfeng113321 小时前
workbuddy 专家 “前端开发师” 结合nvidia-mistral-small-4-119b-2603 项目计划-前端界面开发.md
前端·人工智能·免费