Vue3+ant design 中根据字符串动态渲染Menu组件的icon图标

文章介绍了在AntDesign4+版本中,如何处理从后台获取的字符串形式的图标,通过字面量存储Icon组件并使用对象属性名在Vue路由中动态渲染的问题及解决方案。
摘要由CSDN通过智能技术生成

在ant design4+版本中 icon是组件的形式引用 在Menu才当中需要使用h函数渲染,但是一般带有权限的往往是从后台获取的,而后台返回的icon字段大多是字符串,在而h函数无法直接渲染字符串形式的icon组件,解决这一问题。直接上代码。

引入需要用到的icon组件

import {
  PieChartOutlined,
  MailOutlined,
  DesktopOutlined,
  InboxOutlined,
  AppstoreOutlined,
  SettingOutlined,
  ReloadOutlined,
  PicRightOutlined,
  FullscreenOutlined,
  BellOutlined,
  PoweroffOutlined,
  SearchOutlined,
} from "@ant-design/icons-vue";

用字面量存储起来

const AntdIcons = {
  PieChartOutlined,
  MailOutlined,
  DesktopOutlined,
  InboxOutlined,
  AppstoreOutlined,
  SettingOutlined,
  ReloadOutlined,
  PicRightOutlined,
  FullscreenOutlined,
  BellOutlined,
  PoweroffOutlined,
  SearchOutlined,
}

路由的基本配置,假设从服务器得到的数据大致也是这个形式的。其中最主要的是iconName字段,需要根据字符串渲染组件。

 {
        path: "dashboard",
        name: "工作台",
        iconName: "DesktopOutlined",
        key: "dashboard",
        label: "工作台",
        meta: {
          auth: false,
        },
        component: () => import("@/views/dashboard.vue"),
      },

最重要的一部,在渲染图标的时候使用对象属性的形式访问即可。这里简略了部分代码,要记住引入图标后是使用字面量存储后再通过对象属性名的方式访问即可。

item.icon = () => h(AntdIcons[iconName]);

完整的渲染

onMounted(() => {
  //获取路由数据 这要根据自己获取到的数据进行调整
  const indexRoutes = router.options.routes[3].children;
  indexRoutes.map((item) => {
    delete item.component;
    delete item.meta;
    delete item.name;
    delete item.path;
    //获得图标名称
    const iconName = item.iconName
    //根据名称渲染
    item.icon = () => h(AntdIcons[iconName]);
    if (item.children) {
      //处理二级路由
      for (let i = 0; i < item.children.length; i++) {
        delete item.children[i].path;
        delete item.children[i].component;
        delete item.children[i].meta;
        delete item.children[i].name;
        delete item.children[i].icon;
        const iconName = item.children[i].iconName
        item.children[i].icon = () => h(AntdIcons[iconName]);
      }
    }
  });
  state.leftNavData = indexRoutes
});
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值