怎么在Vue中实现一个动态面包屑功能(vue,web开发)

时间:2024-04-28 20:47:44 作者 : 石家庄SEO 分类 : web开发
  • TAG :

首先我们想到的最笨的方法就是在每个需要面包屑的页面中固定写好。

<template><divclass="example-container"><el-breadcrumbseparator="/"><el-breadcrumb-itemv-for="(item,index)inbreadList":key="index":to="{path:item.path}">{{item.name}}</el-breadcrumb-item></el-breadcrumb></div></template><script>exportdefault{name:"Example",data(){return{breadList:[{name:"首页",path:"/home"},{name:"系统设置",path:"/setting"},{name:"用户管理",path:"/setting/usermanage"}]};}};</script>

如果按照上述方式去实行的话,虽然我们可以完成面包屑的功能,但是它不够灵活,在每个需要的页面添加,带来的维护成本是巨大的。

最主要的是你们的产品天天变需要咋办,还不累死。有人说登哥我就喜欢这么改,只有这样我才会有工作量。

好吧那当我没说,但是我劝你善良,登哥劝你一句,把那些大量重复的工作尽可能的赶紧做完,剩下的时间你才能自由安排,进行充能呀。

否则,你拿什么进步?普通的人总是喜欢抱怨没有时间,而优秀的人就是这么把时间省下来的。他们知道什么事情重要,什么事情不重要。

不过还是有人会说我就想安安静静写写代码,其他的我不想。那也行,不过这样写显然不够逼格。

利用 路由元信息

上面的方法,非常的不够逼格,显然不是我们想要的,那我们再来看看第二种实现方式。

我们可以把路径结构配置在 Route meta 属性中。

constrouter=newRouter({routes:[{path:'/example',name:'example',component:Example,meta:{breadList:[{name:"首页",path:"/home"},{name:"系统设置",path:"/setting"},{name:"用户管理",path:"/setting/usermanage"}]}}]});exportdefaultrouter;

然后我们直接在页面中使用计算属性获取数据。

<template>//...省略</template><script>exportdefault{name:"Example",computed:{breadList(){returnthis.$route.meta.breadList||[];}}};</script>

这样也能实现我要想的效果,但是这个还是显得比较冗余,路由数据已经定义好一次结构,还要加上一个专门的面包屑数据,造成代码的重复,还是不够逼格。

那接下来登哥教你一招比较有逼格的。准备好小本本记下来。

路由对象 matched 属性

首先我们先来看看官方对 matched 的介绍。

matched:返回一个数组,包含当前路由的所有嵌套路径片段的路由记录 。

可以看到当我们定义好路由结构以后,我们就可以获取到当前页面的路由记录。

首先我们先创建一个面包屑的组件。

//Breadcrumb.vue<script>exportdefault{data(){return{breadList:[]//路由集合};},watch:{$route(){this.getBreadcrumb();}},methods:{isHome(route){returnroute.name==="home";},getBreadcrumb(){letmatched=this.$route.matched;//如果不是首页if(!this.isHome(matched[0])){matched=[{path:"/home",meta:{title:"首页"}}].concat(matched);}this.breadList=matched;}},created(){this.getBreadcrumb();}};</script>

创建完组件之后,在需要的地方注入即可。如果你的网页结构布局合理恰当的话只需要一处引用就可以所有网页使用啦。

真可谓 “一处代码供全局”。

定义的路由信息如下:

constrouter=newRouter({routes:[{path:'/',redirect:'/home'},{path:'/home',name:'home',component:Home,meta:{title:'首页'}},{path:'/setting',name:"setting",component:()=>import('./views/setting/Setting.vue'),redirect:'/setting/user',meta:{title:'系统设置'},children:[{path:'user',component:()=>import('./views/setting/UserMange.vue'),name:'usermanage',meta:{title:'用户管理'}},{path:'message',component:()=>import('./views/setting/MesMange.vue'),name:'mesmanage',meta:{title:'短信管理'}}]},{path:'/example',name:'example',component:Example,meta:{title:'综合实例'}}]});exportdefaultrouter;

可以看到我们非常灵活的实现出我们需要的效果。可能这个功能并没有完善,比如有些页面不需要怎么办?

其实只要我们过滤下数据就可以实现,比如利用 meta 不存在时面包屑数据置空,或者增加一个数据标示面包屑的现实隐藏。等等都是一种思路。小伙伴们不妨发挥自己的想象试试吧。

看十遍不如自己撸一遍。这样很快就能掌握知识点。最后上下效果图给大家观摩。

怎么在Vue中实现一个动态面包屑功能

vue是什么

Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的区别是,使用Vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用Vue可以采用单文件组件和Vue生态系统支持的库开发复杂的单页应用。

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:怎么在Vue中实现一个动态面包屑功能的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java数据结构中如何进行并查集的实现下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18