vue 动态面包屑 通过面包屑带参数跨级跳转 面包屑动态标题 多级路由嵌套设置默认页面和隐藏左侧导航栏显示

面包屑

实现效果

可以通过面包屑进行跨级跳转

以下为我的面包屑组件,breadcrumb.vue

<template>
  <div class="navbar clearfix">
    <el-breadcrumb class="breadcrumb-container" separator-class="el-icon-arrow-right">
      <el-breadcrumb-item > <span @click="back">返回</span> </el-breadcrumb-item>
      <el-breadcrumb-item v-for="item in levelList" :key="item.path" :to="item.path">{{item.meta.title}}</el-breadcrumb-item>
    </el-breadcrumb>
  </div>
</template>

<script>
  export default {
    name: 'Navbar',
    data() {
      return {
        levelList: []
      }
    },
    watch: {
      $route() {
        this.getBreadcrumb()
      }

    },
    created() {
      this.getBreadcrumb()
    },
    methods: {
      back() {
        this.$router.go(-1); //返回上一层
      },
      getBreadcrumb() {
        //$route.matched一个数组 包含当前路由的所有嵌套路径片段的路由记录
        let matched = this.$route.matched.filter(item => item.name)
        const first = matched[0];
        this.levelList = matched
      }
    }
  }
</script>

应用面包屑

在最外层的主页Home.vue中的js部分,其他可以自己补上

然后在主体上加上<router-view></router-view>标签存放内容

<script>
  import Breadcrumb from './navbar.vue'
  export default {
    components: {
      Breadcrumb
    }
}
</script>

动态面包屑

实现动态面包屑本人的方法不一定是最好的,但是比较方便.

var title = "想设置的标题";
this.$route.matched[this.$route.matched.length - 1].meta.title = title; //设置路由名称
            let path = this.$route.matched[this.$route.matched.length - 1].path;
            if (path.indexOf("?") > 0) {
              this.$route.matched[this.$route.matched.length - 1].path = path.split("?")[0] + "?id=" +
                id;
            } else {
              this.$route.matched[this.$route.matched.length - 1].path = path + "?id=" + id; //设置路由路径
            }

把这段代码添加在需要实现的页面就自动会在跳转的时候将面包屑的名称更改

路由

多级路由嵌套设置默认页面 只需要把默认的子路由的path项设定为空

以下为路由的索引页./route/index.js的实例

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router);

export default new Router({
  routes: [{
      path: '/',
      name: 'Login',
      component: resolve => require(['@/components/Login'], resolve),
      hidden: true //表示在左侧导航栏隐藏
    },
    {
      path: '/home.html',
      name: '一级',
      component: resolve => require(['@/components/Home'], resolve),
      iconCls: "el-icon-menu",
      meta: {
        title: '一级',
        keepAlive: false, // 不需要缓存
        requireAuth: true //表示进入这个路由是需要登录的
      },
      children: [
        {
          path: '/feedback.html',
          component: resolve => require(['@/components/user/feedback'], resolve),
          name: '二级',
          meta: {
            title: '二级',
            keepAlive: false, // 不需要缓存
            requireAuth: true // 添加该字段,表示进入这个路由是需要登录的
          },
            children: [{
          path: '',//这里设置为空
          component: resolve => require(['@/components/user/userChildren'], resolve),
          name: '三级',
          meta: {
            title: '三级',
            keepAlive: false, // 不需要缓存
            requireAuth: true // 添加该字段,表示进入这个路由是需要登录的
          }
        }
      ]
        }
      ]
    }
  ]
})

多路由嵌套

需要注意的是,每个子路由都需要对应一个 <router-view></router-view>标签来存放

我新建了一个main.vue来存放多路由嵌套多个界面

<template>
  <keep-alive>
    <router-view :key="Math.random()"></router-view>
  </keep-alive>
</template>
<script>
</script>
<style>
</style>

/route/index.js里面设置的title就是面包屑显示的名字

 

Vue项目中,实现页面路由跳转的同时清除或禁用导航栏面包屑)记录的功能,可以通过以下几种方法来实现: ### 方法一:使用路由元信息(meta) 1. **在路由配置中添加meta字段**:在路由配置文件中,为需要清除面包屑路由添加一个自定义的meta字段,例如`noBreadcrumb`。 ```javascript const routes = [ { path: '/home', component: Home, meta: { breadcrumb: '首页' } }, { path: '/no-breadcrumb-page', component: NoBreadcrumbPage, meta: { noBreadcrumb: true } } ]; ``` 2. **在导航栏组件中监听路由变化**:在导航栏组件中,通过监听路由变化来控制面包屑显示。 ```javascript export default { watch: { $route(to, from) { if (to.meta.noBreadcrumb) { this.clearBreadcrumbs(); } else { this.addBreadcrumb(to.meta.breadcrumb); } } }, methods: { clearBreadcrumbs() { // 清除面包屑记录的逻辑 }, addBreadcrumb(breadcrumb) { // 添加面包屑记录的逻辑 } } }; ``` ### 方法二:使用全局导航守卫 1. **在路由配置中添加meta字段**:同上。 2. **设置全局导航守卫**:在路由配置文件或单独的导航守卫文件中,设置全局导航守卫来控制面包屑显示。 ```javascript router.beforeEach((to, from, next) => { if (to.meta.noBreadcrumb) { // 清除面包屑记录的逻辑 } else { // 添加面包屑记录的逻辑 } next(); }); ``` ### 方法三:使用Vuex状态管理 1. **在Vuex中定义一个状态来控制面包屑**:在Vuex中定义一个状态来控制面包屑显示。 ```javascript const store = new Vuex.Store({ state: { breadcrumbs: [] }, mutations: { setBreadcrumbs(state, breadcrumbs) { state.breadcrumbs = breadcrumbs; }, clearBreadcrumbs(state) { state.breadcrumbs = []; } } }); ``` 2. **在导航栏组件中监听Vuex状态变化**:在导航栏组件中,通过监听Vuex状态变化来控制面包屑显示。 ```javascript export default { computed: { breadcrumbs() { return this.$store.state.breadcrumbs; } }, watch: { '$route'(to, from) { if (to.meta.noBreadcrumb) { this.$store.commit('clearBreadcrumbs'); } else { this.$store.commit('setBreadcrumbs', [to.meta.breadcrumb]); } } } }; ``` 通过以上几种方法,可以实现在页面路由跳转的同时清除或禁用导航栏面包屑)记录的功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值