网站环境搭建,福州seo快速排名软件,企业运营方案,企业新闻营销转载自 动态路由匹配我们经常需要把某种模式匹配到的所有路由#xff0c;全都映射到同个组件。例如#xff0c;我们有一个 User 组件#xff0c;对于所有 ID 各不相同的用户#xff0c;都要使用这个组件来渲染。那么#xff0c;我们可以在 vue-router 的路由路径中使用…转载自 动态路由匹配我们经常需要把某种模式匹配到的所有路由全都映射到同个组件。例如我们有一个 User 组件对于所有 ID 各不相同的用户都要使用这个组件来渲染。那么我们可以在 vue-router 的路由路径中使用“动态路径参数”(dynamic segment) 来达到这个效果
const User {template: divUser/div
}const router new VueRouter({routes: [// 动态路径参数 以冒号开头{ path: /user/:id, component: User }]
})现在呢像 /user/foo 和 /user/bar 都将映射到相同的路由。
一个“路径参数”使用冒号 : 标记。当匹配到一个路由时参数值会被设置到 this.$route.params可以在每个组件内使用。于是我们可以更新 User 的模板输出当前用户的 ID
const User {template: divUser {{ $route.params.id }}/div
}你可以看看这个在线例子。
你可以在一个路由中设置多段“路径参数”对应的值都会设置到 $route.params 中。例如
模式匹配路径$route.params/user/:username/user/evan{ username: evan }/user/:username/post/:post_id/user/evan/post/123{ username: evan, post_id: 123 }
除了 $route.params 外$route 对象还提供了其它有用的信息例如$route.query (如果 URL 中有查询参数)、$route.hash 等等。你可以查看 API 文档 的详细说明。
#响应路由参数的变化
提醒一下当使用路由参数时例如从 /user/foo 导航到 /user/bar原来的组件实例会被复用。因为两个路由都渲染同个组件比起销毁再创建复用则显得更加高效。不过这也意味着组件的生命周期钩子不会再被调用。
复用组件时想对路由参数的变化作出响应的话你可以简单地 watch (监测变化) $route 对象
const User {template: ...,watch: {$route (to, from) {// 对路由变化作出响应...}}
}或者使用 2.2 中引入的 beforeRouteUpdate 守卫
const User {template: ...,beforeRouteUpdate (to, from, next) {// react to route changes...// dont forget to call next()}
}#高级匹配模式
vue-router 使用 path-to-regexp 作为路径匹配引擎所以支持很多高级的匹配模式例如可选的动态路径参数、匹配零个或多个、一个或多个甚至是自定义正则匹配。查看它的 文档 学习高阶的路径匹配还有 这个例子 展示 vue-router 怎么使用这类匹配。
#匹配优先级
有时候同一个路径可以匹配多个路由此时匹配的优先级就按照路由的定义顺序谁先定义的谁的优先级就最高。