首页 > 其他分享 >elementui 导航菜单栏和Breadcrumb 面包屑关联

elementui 导航菜单栏和Breadcrumb 面包屑关联

时间:2024-03-30 19:31:46浏览次数:21  
标签:el vue elementui route HomeView Breadcrumb 面包屑 路由

系列文章目录

一、elementui 导航菜单栏和Breadcrumb 面包屑关联


文章目录


前言

最近又突发奇想想做一个分享类的个人视频小网站,该网站主要分享电影、电视剧、动漫、资源4个模块。作为刚入门的vue小白,前前后后遇到各种问题,好在通过百度或官方文档解决了大部分问题。

该网站涉及技术:前端用elementui vue2.0,后端是纯springboot

下面是个人视频分享网站最新效果,该网站支持PC和手机,各位大佬们感兴趣的记得收藏,视频资源不定期更新,让你在闲暇之余既能学技术也能看感兴趣的视频资源!

观看网址:http://101.43.20.112
PS:域名申请下来了,但是备案过不了,理由是个人不能建立视频分享网站涉及版权侵权等各种问题,无奈只能用IP地址访问了

手机端:
个人更专注于手机端的实现效果,做了很多兼容性的调试工作。
在这里插入图片描述
PC端: 页面将就着看吧
在这里插入图片描述

开发过程中主要问题

一、elementui 导航菜单栏和Breadcrumb 面包屑怎么关联?

在Element UI中,导航菜单栏(NavMenu)和面包屑(Breadcrumb)经常被用来表示当前页面的位置和路径。要实现它们之间的关联,通常需要在两者的数据源上保持一致,并且监听路由的变化来更新面包屑的内容。完整代码附在文章的最后面

二、实现效果

点击导航栏左侧【2024新片精品】,关联到面包屑目录【首页/2024新片精品】
在这里插入图片描述

三、实现步骤

PS:针对有一点点vue基础的新手

1.本项目演示布局

我的项目是简单的 【上Header / 左Aside / 右Main】布局,如下图:
在这里插入图片描述

2.添加面包屑

在标签即上图中main的布局容器上方添加如下面包屑代码

<el-container>
	<!-- 面包屑 -->
	<el-breadcrumb separator-class="el-icon-arrow-right" style="padding-top:10px;height: 30px">
	   <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
	   <el-breadcrumb-item v-if="this.$route.path !== '/'">{{ breadcrumbName(this.$route.path) }}</el-breadcrumb-item>
	 </el-breadcrumb>
	 
	 <el-main>
	   <!-- 路由出口,渲染与当前菜单项关联的组件 -->
	    <router-view></router-view>
	 </el-main>  
 </el-container>       

2.实现breadcrumbName方法

 methods: {
   	 // 面包屑
     breadcrumbName(route) {
       console.log("route="+route)
       return this.routePaths[route] || '未知';
     }
   },

3.监听方法

 watch: {
    $route(to, from) {
       this.activeMenu = to.path;
     }
   }

4.路由指配

  data() {
      return {
        activeMenu: '/', // 当前激活的菜单项
        routePaths: {
          '/': '首页',
          '/filmview': '2024新片精品',
          // 更多路由和面包屑名称的映射
        }
      }
    },

5.路由配置信息

路由component配置一般有两种,我个人喜欢第二种

import HomeView from '../views/HomeView.vue'
const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView, // 第1种 路由配置
    children: [
      {path:  '/filmview',component:  ()=> import( '../views/FilmView.vue')} // // 第2种 路由配置 
    ]
  }
]

四、完整代码

1.路由文件配置(dramsvue为我的项目名)

一般在项目dramsvue\src\router\index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'
Vue.use(VueRouter)
const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView,//
    children: [
      {path:  '/filmview',component:  ()=> import( '../views/FilmView.vue')}
    ]
  }
]
const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})
export default router

2.导航栏和面包屑关联

我的代码全在:dramsvue\src\views\HomeView.vue

<template>
  <div>
    <el-container style="border: 1px solid #ccc">
      <el-header>Header</el-header>
      <el-container>
        <el-aside width="200px" style="background-color: #545c64">
          <el-menu
                  default-active="2"
                  class="el-menu-vertical-demo"
                  @open="handleOpen"
                  @close="handleClose"
                  background-color="#545c64"
                  text-color="#fff"
                  active-text-color="#ffd04b"
                  :router="true" >
            <el-submenu index="1">
              <template slot="title"><i class="el-icon-video-camera-solid"></i>电影</template>
              <el-menu-item-group>
                <el-menu-item index="1-1" route="/filmview"><el-badge value="hot" class="item">2024新片精品 </el-badge></el-menu-item>
                  <el-menu-item index="1-2" route="/"><el-badge value="hot" class="item">2024必看热片 </el-badge></el-menu-item>
                <el-menu-item index="1-3" route="/">经典大片</el-menu-item>
              </el-menu-item-group>
            </el-submenu>
            <el-submenu index="2">
              <template slot="title"><i class="el-icon-s-platform"></i>电视剧</template>
              <el-menu-item-group>
                <el-menu-item index="2-1"><el-badge value="hot" class="item">2024最新上架</el-badge></el-menu-item>
                <el-menu-item index="2-2">2024必看喜剧</el-menu-item>
                <el-menu-item index="2-3">古装</el-menu-item>
              </el-menu-item-group>
            </el-submenu>
            <el-submenu index="3">
              <template slot="title"><i class="el-icon-camera-solid"></i>动漫</template>
              <el-menu-item-group>
                <el-menu-item index="3-1">内地</el-menu-item>
                <el-menu-item index="3-2">日本</el-menu-item>
                <el-menu-item index="3-3">欧美</el-menu-item>
              </el-menu-item-group>
            </el-submenu>
          </el-menu>
        </el-aside>
        <el-container>
          <!-- 面包屑 -->
          <el-breadcrumb separator-class="el-icon-arrow-right" style="padding-top:10px;height: 30px">
            <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
            <el-breadcrumb-item v-if="this.$route.path !== '/'">{{ breadcrumbName(this.$route.path) }}</el-breadcrumb-item>
          </el-breadcrumb>
          <el-main>
            <!-- 路由出口,渲染与当前菜单项关联的组件 -->
            <router-view></router-view>
          </el-main>
          <el-footer style="height: 20px;color: #ff1b08;"><div style="font-size: 10px">底部</div></el-footer>
        </el-container>
      </el-container>
    </el-container>
  </div>
</template>

<style scoped>
  .el-aside {
    color: #48b7d1;
  }
  .el-main {
    background: #eaedf2;
    height: calc(100vh - 100px);
  }

  body > .el-container {
    margin-bottom: 40px;
  }

  .el-container:nth-child(5) .el-aside,
  .el-container:nth-child(6) .el-aside {
    line-height: 260px;
  }

  .el-container:nth-child(7) .el-aside {
    line-height: 320px;
  }
  .el-header, .el-footer {
    background-color: #B3C0D1;
    color: #333;
    text-align: center;
    line-height: 60px;
  }
  .item {
    margin-top: 0px;
    margin-right: 40px;
  }
</style>

<script>
  export default {
    name: "HomeView",
    data() {
      const item = {
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      };
      return {
        tableData: Array(20).fill(item),
        activeMenu: '/', // 当前激活的菜单项
        routePaths: {
          '/': '首页',
          '/filmview': '2024新片精品',
          // 更多路由和面包屑名称的映射
        }
      }
    },
     methods: {
       handleOpen(key, keyPath) {
         console.log(key, keyPath);
       },
       handleClose(key, keyPath) {
         console.log(key, keyPath);
       },

      // 面包屑
       breadcrumbName(route) {
         console.log("route="+route)
         return this.routePaths[route] || '未知';
       }
     },
    watch: {
      $route(to, from) {
        this.activeMenu = to.path;
      }
    }
  };
</script>

以上就是今天分享的内容,要是对你有帮助的话记得点赞收藏关注哦!

标签:el,vue,elementui,route,HomeView,Breadcrumb,面包屑,路由
From: https://blog.csdn.net/wyqshusan/article/details/137012350

相关文章

  • elementUI——el-form表单数据校验(包含数组循环)
    一、普通的值类型的数据校验①设置el-form-item的prop值与formdata中定义的key保持一致`②如果rules需要通过el-form统一设置,rules的key定义也与prop保持一致(如果不一致,需要在el-form-item中手动指定)③复杂的校验函数可通过validator单独定义<el-form......
  • elementUI表单表头增加筛选
    1、增加过滤条件 2、定义数据,必须包含text以及value 3、使筛选的id与行内元素id一直进行筛选 4、对下拉icon大小更改 ......
  • elementui组件el-input 类型为number时,去掉上下箭头,并且解决输入中文后光标上移问题
    //去掉number输入框的上下箭头.def-input-numberinput::-webkit-outer-spin-button,.def-input-numberinput::-webkit-inner-spin-button{-webkit-appearance:none;}.def-input-numberinput[type="number"]{-moz-appearance:textfield;}//解决inputnumber框......
  • Java项目:小程序公交信息在线查询系统(java+SSM+Vue+ElementUI+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于SSM+Vue的小程序公交信息在线查询系统小程序角色:管理员、用户两种角色,分为小程序端和后台管理两部分;用户:用户通过小程序登录页面可以填写用户名和密码等信息进行登录操作,登录成功后,进入首页可以查看首页、线路信息、站......
  • Java项目:小程序公交信息在线查询系统(java+SSM+Vue+ElementUI+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于SSM+Vue的小程序公交信息在线查询系统小程序角色:管理员、用户两种角色,分为小程序端和后台管理两部分;用户:用户通过小程序登录页面可以填写用户名和密码等信息进行登录操作,登录成功后,进入首页可以查看首页、线路信息、站......
  • Java项目:汽车租赁管理系统(java+SpringBoot+Vue+ElementUI+Mybaits+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于SpringbootVue汽车租赁管理系统角色:管理员、用户、普通管理员三种角色,分为前后台;用户:用户通过用户登录页面可以填写用户名和密码等信息进行登录操作,登录成功后,进入首页可以查看首页、汽车信息、汽车资讯、汽车论坛、公......
  • ElementUI的Table控件,合并列
    x//计算需要合并的列for(letk=0;k<that.tableData.length;k++){//判断当前类型是否与下一个类型一致,一致则两个单元格合并。if((k+1)<that.tableData.length&&......
  • 2020-6-17-elementui
    安裝、Button组件、文字链接组件、Layout栅格布局、Container容器、Radio组件、CheckBox组件、Input组件、Select选择器、Switch组件、时间日期组件、Upload组件、Form表单、消息提示、表格安裝1安装到项目中在初始化好Vue项目后执行以下命令npmielement-ui-s也可以通过......
  • elementUI中点击触发两次点击事件原理及解决方法
    ​ 最近在研究vue3,在学习vue3和element-plus的过程中,突然发现el-radio的一个问题,element的版本号如下"element-plus":"2.2.27",​ 代码如下:<template> <divclass="button-group"><el-radio-groupv-model="buttonGroup">......
  • elementui 表格复选框根据列表状态设置禁用效果
    el-table表格type="selection"复选框需要根据状态来设置是否禁用,需要加selectable属性返回为false时则为禁用注意selectable要是一个方法不能设置变量checkSelectable(row){if(row.status==="0"){returntrue;}else{......