动态路由匹配
const router = new VueRouter({
routes: [
// 动态路径参数 以冒号开头
{ path: "/user/:id", component: User },
],
});
1
2
3
4
5
6
2
3
4
5
6
解读
有一个路由是/user/
那么基于它下面的所有的子路由,都会被/:id
匹配到,比如/user/news
、/user/about
等。 有什么用呢?举个例子!比如我们经常去的淘宝网站的产品详情页,我们看小说网站的阅读界面,你会发现,虽然每个页面的地址栏不同,但是页面是一样的,所以,这就是一种匹配策略,即一个路由匹配多个地址,呈现同一个页面,页面根据地址关键参数不同,展示不同的数据内容。
所以,这里介绍的就是简单的动态路由,那么动态地址部分/:id
这个值怎么获取到呢?
// 在路由组件里使用
this.$route.params.id
// 这里需要注意的是id名称不是死的,是根据咱们配置路由时取得名字,动态路由可以匹配很多个,比如
path: '/user/:id/:age/:job'
// 那获取得时候就得这样写
this.$route.params.id、this.$route.params.age、this.$route.params.job
// 上面获取得就是咱们配置里写的字段名称,不是固定死的,如果是直接在html中,不加this
1
2
3
4
5
6
7
2
3
4
5
6
7
监听路由变化
由于动态路由复用的是同一个组件,为了优化性能,所以不会重新加载组件,那么我们需要使用监听或监听路由函数【路由守卫】来获取路由更新的参数
watch: {
'$route' (to, from) {
// 对路由变化作出响应...
}
}
// or 使用计算属性也可以
computed: {
id: function(){
return this.$route.params.id
}
}
// 使用v2.2 中引入的 beforeRouteUpdate 导航守卫
beforeRouteUpdate (to, from, next) {
// react to route changes...
// don't forget to call next()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16