19.面包屑导航制作

面包屑导航制作

官网:组件 | Element

1. 在layout下新建BreadCrumb.vue

BreadCrumb.vue

vue 复制代码
<template>
    <div class="bread-text">
        <el-breadcrumb class="bred"separator="/">
            <el-breadcrumb-item v-for="item in tabs">{{ item.meta.title }}</el-breadcrumb-item>
        </el-breadcrumb>
    </div>
</template>

<script setup lang="ts">
import { onMounted, ref,Ref,watch } from 'vue';
import { useRoute,RouteLocationMatched } from 'vue-router';
// 获取当前路由
const route = useRoute();
//定义面包屑导航数据
const tabs : Ref<RouteLocationMatched[]> = ref([])
//获取面包数据
const getBreadCrumb = () => {
    // console.log(route)
    //找出存在title属性的路由数据
    let matched = route.matched.filter((item)=>item.meta && item.meta.title)
    // console.log(matched)
    const first = matched[0]
    //如果第一项不是首页,则添加首页
    if(first.path !=='/dashboard'){
        //构造首页
        matched = [{path:'/dashboard',meta:{title:'首页'}} as any].concat(matched)
    }
    tabs.value = matched;
}
//监听当前路由
watch(
    ()=>route.path,
    ()=>getBreadCrumb()
)
//刷新面包屑数据不会丢失当前页面
onMounted(()=>{
    getBreadCrumb()
})
</script>

<style scoped lang="scss">
//修改字体颜色
:deep(.el-breadcrumb__inner) {
  color: #8d8d8d !important;
}
.bred {
  margin-left: 20px;
}
// 修改字体大小
:deep(.el-breadcrumb__item) {
  font-size: 15px !important;
}
.bread-text{
    margin-left: 29px;
}
</style>

在Index.vue中引入

vue 复制代码
<template>
    <el-container class="mycontainer">
        <el-aside width="230px" class="asside">
            <Menu></Menu>
        </el-aside>
        <el-container>
            <el-header class="header">
                <Collapse></Collapse>
                <BreadCromb></BreadCromb>
            </el-header>
            <el-main class="mymain">
                <router-view></router-view>
            </el-main>
        </el-container>
    </el-container>
</template>

<script setup lang="ts">
import Menu from "./Menu.vue"
import Collapse from "./Collapse.vue";
import BreadCromb from "./BreadCromb.vue";
</script>

<style scoped lang="scss">
.mycontainer{
    height: 100%;
    .asside{
        background-color: #0a2542;
        // 使宽度自适应
        width: auto;
    }
    .header{
        background-color: rgb(255, 255, 255);
        color: #000;
        display: flex;
        align-items: center;
    }
    .mymain{
        background-color: rgb(244, 244, 244);
    }
}


</style>

2. 效果图

相关推荐
雪碧聊技术6 分钟前
Vue + Element Plus 实现文本溢出显示省略号及悬浮提示
前端·javascript·css·vue.js·文本溢出省略
eric-sjq8 分钟前
0.6B 前端生成模型本地部署实战:消费级显卡跑通 WanlyFrontend 全流程
前端·本地部署
小妖6661 小时前
设置了 box-sizing: border-box; 不管用,下边框还是被挤压没了
前端·css·html
雪隐2 小时前
个人电脑玩AI-16让5060 Ti给你打工——5060Ti 16G 跑 MiniMax-Music-3:从下载到 60s 出歌的全流程
前端·人工智能·后端
张元清2 小时前
React useLatest Hook:在异步回调里读到最新状态 (2026)
javascript·react.js
CAD老兵3 小时前
让 AI Coding Agent 直接访问 CAD 文档:GitMCP 实战指南
前端·人工智能·github
程序员鱼皮3 小时前
DeepSeek Harness 最新邪修曝光!被吹成核弹的极简模式,真的夯吗?
前端·后端·ai编程
无己心3 小时前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
袅沫3 小时前
Nginx中部署多个前端项目——区分路径
服务器·前端
Asize3 小时前
为什么写代码前要先规划组件树?Next.js + Redis 笔记系统实战
前端·javascript·next.js