vue中面包屑的实现方法

vue中面包屑的实现方法

面包屑是什么:

  • 面包屑是作为辅助和补充的导航方式(secondary navigation
    scheme),它能让用户知道在网站或应用中所处的位置并能方便地回到原先的地点。
  • 最常见的面包屑的样式是:横向的文字链接,由大于号“>”分开,这个符号也暗示了它们的层级关系
    一个样式

实现原理:
1.在router配置中加入meta(元数据)对象,存放一些自定义的内容。例如在面包屑的实现中加入title变量,这个变量则是面包屑展示出来的多级标题。
2.在用到面包屑的页面中调用watch监听,监听route的变化,用this.$route.matched获取到匹配当前路由的所有片段的配置参数对象,返回一个数组,存到list中
3.用v-for 遍历li标签,将list.meta.title作为router-link的{标题信息},:to=“list.path”,将list信息动态渲染到面包屑上

具体的代码演示
面包屑组件:

breadcrumb.vue


<template>
    <div class="breadcumb">
        <ul>
          <li v-for="(v,i) in lists" :key="i">
            <router-link :to="{path:v.path}">{{v.meta.title}}</router-link>
            <span v-if="i<lists.length-1">/</span>
          </li>
        </ul>
      </div>
</template>

<script>

export default {
  name: 'Home',
  data(){
    return {
      lists:[]
    }
  },

  //监听路由变化
  watch:{
    $route(to,from){
      let matched = to.matched;   //this.$route.matched
      //这个地方是为了固定第一级目录是首页不变
      if(matched.length && matched[0].name!=="home"){
        matched = [{ path: '/home',name: 'home',meta:{title:'首页'}},...matched];
      }
      ...数组名 是一种追加数组的方法
      var arr = [1,2,3]
      var arr1 = [4,5]
      var arr2 = [2,...arr1] == [2,4,5]
      //
      this.lists = matched;
    }
  }
}
</script>

配置路由文件:

router/index.js

{
    path: '/list',
    name: 'list',
    meta:{title:'列表展示'},
    component: () => import('../views/list/index.vue'),
    children:[{      //二级路由
          //path:'testA',    
          path:'/list/testA',  
          name:'testA',
          meta:{title:'子列表A'},
          component: () => import('../views/list/part1.vue')
        },
        {
          path:'testB',   
          name:'testB',
          meta:{title:'子列表B'},
          component: () => import('../views/list/part2.vue')
    }]
  },
  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue2面包屑导航的实现可以通过以下步骤: 1. 创建一个面包屑导航组件 在Vue,可以通过`<template>`标签来定义组件的模板,然后通过`<script>`标签来定义组件的逻辑。例如,以下是一个简单的面包屑导航组件: ``` <template> <div class="breadcrumb"> <ul> <li v-for="(item, index) in items" :key="index"> <a :href="item.link">{{ item.label }}</a> </li> </ul> </div> </template> <script> export default { name: 'Breadcrumb', props: { items: { type: Array, required: true } } } </script> ``` 在上面的代码,我们定义了一个名为`Breadcrumb`的组件,并且传入了一个名为`items`的属性,它是一个数组类型,表示面包屑导航的每一项。在模板,我们使用`v-for`指令来遍历每一项,并使用`:href`和`{{}}`语法来动态绑定链接和标签的内容。 2. 在父组件使用面包屑导航组件 在父组件,我们可以通过引入面包屑导航组件来使用它。例如,以下是一个使用面包屑导航组件的例子: ``` <template> <div> <Breadcrumb :items="breadcrumbItems" /> <!-- other content goes here --> </div> </template> <script> import Breadcrumb from './Breadcrumb.vue' export default { name: 'MyPage', components: { Breadcrumb }, data () { return { breadcrumbItems: [ { label: 'Home', link: '/' }, { label: 'Products', link: '/products' }, { label: 'Product A', link: '/products/a' } ] } } } </script> ``` 在上面的代码,我们将面包屑导航组件引入到父组件,并使用`:items`属性将面包屑导航的每一项传递给它。在`data`,我们定义了一个名为`breadcrumbItems`的数组,它包含了面包屑导航的每一项的标签和链接。 3. 根据路由动态生成面包屑导航 除了通过属性传递面包屑导航的每一项外,我们还可以根据当前的路由动态生成面包屑导航。例如,我们可以使用Vue Router的`$route`对象来获取当前路由的信息,并根据它来生成面包屑导航。以下是一个动态生成面包屑导航的例子: ``` <template> <div> <Breadcrumb :items="breadcrumbItems" /> <!-- other content goes here --> </div> </template> <script> import Breadcrumb from './Breadcrumb.vue' export default { name: 'MyPage', components: { Breadcrumb }, computed: { breadcrumbItems () { const items = [] let route = this.$route while (route) { if (route.meta && route.meta.breadcrumb) { items.unshift({ label: route.meta.breadcrumb.label, link: route.path }) } route = route.parent } items.unshift({ label: 'Home', link: '/' }) return items } } } </script> ``` 在上面的代码,我们定义了一个计算属性`breadcrumbItems`,它根据当前的路由动态生成面包屑导航的每一项。具体来说,我们使用`while`循环遍历当前路由及其所有父级路由,如果当前路由有`meta.breadcrumb`属性,则将它的标签和链接添加到面包屑导航。最后,我们将`Home`项添加到面包屑导航的开头,并返回整个面包屑导航数组。在模板,我们通过`:items`属性将面包屑导航传递给面包屑导航组件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值