vue+element的面包屑导航,动态实现(简单好用)2021-09-23

element的面包屑导航没有切换事件,没有各种动态绑定什么的,但是面包屑却需要随页面变化而层级变化
这里,我采用watch监听加判断来搞定

<template>
  <el-card>
    <!-- 面包屑 注意面包屑的点击方法,要加native,因为组件事件触发需要它 -->
    <el-breadcrumb class="bread" separator-class="el-icon-arrow-right">
      <el-breadcrumb-item
        v-for="(item, index) in breadNum"
        :key="index"
        :to="{ path: bread[index].path, query: bread[index].query }"
        @click.native="fnBreadClick"
      >{{ bread[index].text }}</el-breadcrumb-item>
    </el-breadcrumb>
    <!-- 子组件在这里进行动态渲染 -->
    <router-view />
  </el-card>
</template>

<script>
export default {
  data() {
    return {
      bread: [
        { text: '所有课程', path: '/allClass/course' },
        { text: '章', path: '/allClass/chapter', query: {}},
        { text: '节', path: '/allClass/burl', query: {}},
        { text: '题', path: '/allClass/question', query: {}}
      ],
      breadNum: 1
    }
  },
  //重点在这里,通过watch监听$route来实现监听子组件切换,然后封装一个判断的方法
  //这里同样可以通过to from  来保留住那些跳转路由的参数,然后放到data中
  watch: {
    $route(to, from) {
      this.fnBreadClick()
    }
  },
  mounted() {
  //为了防止页面刷新后,breadNum重新回归1,就在这里也执行一次判断方法,这样在子层级中刷新页面
  //这个父组件的面包屑状态仍然是正确的
    this.fnBreadClick()
  },
  methods: {
  //这个方法通过判断路由中的name来判断当前是什么页面,然后切换bread要显示的面包屑数量来切换层级
  //当然有时候同层级可能是不同页面,但在case中单独处理就可以了
    fnBreadClick() {
      const nowpage = this.$route.name
      switch (nowpage) {
        case 'course':
          this.breadNum = 1
          break
        case 'chapter':
          this.breadNum = 2
          break
        case 'burl':
          this.breadNum = 3
          break
        case 'question':
          this.breadNum = 4
          break

        default:
          break
      }
    }
  }
}
</script>

这里面的判断都是根据router中的name的,所以,要写好router中的name

  {
        path: '/allClass',
        name: '/allClass',
        component: () => import('views/allClass'),
        redirect: '/allClass/course',
        children: [
          { path: 'course', name: 'course', component: () => import('views/allClass/course.vue') },
          { path: 'chapter', name: 'chapter', component: () => import('views/allClass/chapter.vue') },
          { path: 'burl', name: 'burl', component: () => import('views/allClass/burl.vue') },
          { path: 'question', name: 'question', component: () => import('views/allClass/question.vue') }
        ]
      },
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3和Element Plus中实现面包屑导航的联动是相对简单的。下面是一个示例,你可以根据自己的需求进行调整。 首先,在你的组件中,你需要使用`el-breadcrumb`和`el-breadcrumb-item`组件来创建面包屑导航。然后,你可以通过`v-for`指令来遍历你的路由数组,动态生成面包屑导航项。当用户点击某个面包屑导航项时,你可以通过路由的`push`方法来实现路由的切换。 ```vue <template> <el-breadcrumb separator="/"> <el-breadcrumb-item v-for="(route, index) in routes" :key="index"> <span @click="goToRoute(route)">{{ route.name }}</span> </el-breadcrumb-item> </el-breadcrumb> </template> <script> export default { data() { return { routes: [ { name: '首页', path: '/' }, { name: '产品', path: '/products' }, { name: '商品详情', path: '/products/:id' }, ], }; }, methods: { goToRoute(route) { this.$router.push(route.path); }, }, }; </script> ``` 在这个示例中,我们使用了一个`routes`数组来存储我们的路由信息。每个路由对象都有一个`name`属性和一个`path`属性,分别表示面包屑导航项的显示名称和路由路径。当用户点击面包屑导航项时,我们调用`goToRoute`方法来切换路由。 需要注意的是,这里使用了Vue Router的`push`方法来实现路由的切换。你需要确保你已经正确配置了Vue Router,并且在使用该组件的父级组件中引入了Vue Router。 希望这个示例可以帮助到你实现Vue3和Element Plus的面包屑导航联动。如果你有任何进一步的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值