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

相关推荐
夏梦春蝉5 分钟前
ES6从入门到精通:常用知识点
前端·javascript·es6
归于尽11 分钟前
useEffect玩转React Hooks生命周期
前端·react.js
G等你下课13 分钟前
React useEffect 详解与运用
前端·react.js
我想说一句14 分钟前
当饼干遇上代码:一场HTTP与Cookie的奇幻漂流 🍪🌊
前端·javascript
funnycoffee12314 分钟前
Huawei 6730 Switch software upgrade example版本升级
java·前端·华为
小鱼小鱼干17 分钟前
【Tauri】Tauri中Channel的使用
前端
拾光拾趣录19 分钟前
CSS全面指南:从基础布局到高级技巧与实践
前端·css
markyankee10121 分钟前
使用 Vue 脚手架创建项目的完整指南
vue.js
南屿im22 分钟前
基于 Promise 封装 Ajax 请求:从 XMLHttpRequest 到现代化异步处理
前端·javascript
青松学前端23 分钟前
vue-2.7源码解读之初始化流程和响应式实现
前端·vue.js·前端框架