$route.matched的作用及动态面包屑导航的制作
一、$route.matched
的作用
官方解释: 与给定路由地址匹配的标准化的路由记录数组。
个人觉得就是当有多级路由的时候,记录每一级路由,并生成数组。如:
const router = new VueRouter({
routes: [
// 下面的对象就是路由记录
{
path: '/foo',
component: Foo,
children: [
// 这也是个路由记录
{ path: 'bar', component: Bar }
]
}
]
})
此时 $route.matched
对应的数组中有两项数据分别是 /foo
路径下的路由和 /foo/bar
路径下所对应的路由。有多少级路由就会对应生成多少级路由下的路由。
那这有什么用呢?当我们制作面包屑导航时就很有用,很多开源框架,都是利用的这个特性
二、面包屑导航制作
<el-breadcrumb class="app-breadcrumb" separator="/">
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
<span>{{ item.meta.title }}</span>
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
<script>
export default {
data () {
return {
levelList: null,
}
},
created () {
this.getBreadcrumb()
},
methods: {
getBreadcrumb() {
// only show routes with meta.title
let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
},
}
}
</script>
这样再切换路由的时候,就可以很方便的获取到上下相关联的路由记录