Vue3 - AntDesignVue 实现 动态面包屑 带 icon 图标

本文介绍了如何在Vue3项目中结合AntDesignVue库,通过设置路由元信息和配置Breadcrumb组件,实现带有图标的动态面包屑导航。详细步骤包括在路由配置中添加meta信息以存储面包屑数据,然后在Breadcrumb组件内部利用这些信息创建动态组件来展示图标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设置路由中的 mete

  • 路由中的配置
  • 通过配置 meta 让我们拿到面包屑所需的名称 + icon 图标
// router/index.ts
import { HomeOutlined, GlobalOutlined } from '@ant-design/icons-vue';
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: "/site",
      name: "site",
      component: () => import("../views/SiteView.vue"),
      meta: {
        path: "site",
        breadcrumbName: "网站",
        icon: GlobalOutlined,
      },
      children: [
        {
          path: "site02",
          name: "site02",
          component: () => import("../views/SiteView02.vue"),
          meta: {
            path: "site02",
            breadcrumbName: "网站02",
          },
        },
      ],
    },
  ],
});

配置组件

  • 面包屑组件
  • 通过 Ant Design Vuebreadcrumb 定义面包屑
  • 通过 route.matched 拿到路由中的 meta
  • 利用动态组件 component 设置动态图标 icon
<template>
  <a-breadcrumb style="margin: 16px 0" :routes="breadcrumb">
    <template #itemRender="{ route, paths }">
      <span v-if="breadcrumb.indexOf(route) === breadcrumb.length - 1">
        <!-- 如果是当前位置,则不需要跳转 -->
        <component :is="route.icon"></component>
        {{ route.breadcrumbName }}
      </span>
      <router-link v-else :to="`/${paths.join('/')}`">
        <component :is="route.icon"></component>
        {{ route.breadcrumbName }}
      </router-link>
    </template>
  </a-breadcrumb>
</template>
<script lang="ts" setup>
import { HomeOutlined } from "@ant-design/icons-vue";
import { computed } from "vue";
import { useRoute, useRouter } from "vue-router";

const route = useRoute();

// 面包屑参数
const breadcrumb = computed(() => {
  let matchedArr = route.matched.map((item) => item.meta);
  if (matchedArr[0].breadcrumbName !== "首页") {
    // 因为 router.matched 不会携带第一个,我们需要给组件添加一个默认首页; 
    const first = {
      path: "/",
      breadcrumbName: "首页",
      icon: HomeOutlined,
    };
    matchedArr.unshift(first);
  }
  return matchedArr;
});
</script>

展示效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值