1x4 VueRouter - 基础 - 重定向 & 路径别名
发布于 2022年 02月 15日 01:50
VueRouter 基础教程系列 🎉
重定向
重定向功能 需要在路由 routes
配置项中进行定义。
重定向的目标可以是一个路径,也可是一个命名路由或者别名。
const routes = [
{
name:'user',
path:'/user/:id',
redirect:'/user/profile',
},
{
path:'/home',
redirect:{name:'user', params:{id:'123456'}}
}
]
redirect
属性也可以是一个方法,用来动态创建重定向的目标地址。
const routes = [
{
path:'/home',
redirect:from => {
return {name:'user', params:{id:'123'}, query:{q:from.query.q}};
}
}
]
from
保存的是源地址的$route
信息,即/home
的路由信息。
路由的导航守卫只会作用于目标路由上,并不会应用到重定向路由上。
在写
redirect
的时候,可以省略component
配置项,因为它从来没有被直接访问过,所以也没有组件要渲染。唯一的例外是嵌套路由,如果一个路由记录同时有children
和redirect
属性,它也应该有component
属性。虽然嵌套路由的父路由是重定向状态,但是其子路由依然是可以被正常访问,所以必须要定义
component
属性。
路径别名
使用 alias
属性可以为路由配置项的 path
属性设置别名。
const routes = [
{
alias: '/profile',
path: '/user/profile',
component: { template: 'profile' }
}
];
这个时候,通过别名 /profile
就相当于访问了 /user/profile
页面。
通过别名访问,浏览器地址栏中展示也是路径别名而非实际的路由
path
地址。
alias
属性的取值还可以是一个数组,来为一个路径定义多个别名,并且它们都关联着同一个渲染组件。
{
path: '/user/profile',
alias:['/profile', '/user-profile']
}
如果路径中带有“路径参数”,那么别名也需要对应的设置。
{
path:'/user/:id/profile',
alias:"/profile/:id",
component:{template:"<div>{{$route.params.id}}</div>"}
}
“别名” 的优点体现在可以更灵活的将 UI 结构映射到一个任意的 URL 上,而不受路由配置的嵌套结构限制,抹平了路由的嵌套层级限制(虽然“命名路由”也能做到,但是浏览器地址栏中的地址依然是真实的 path
)。
路由导航增强
随着不断学习,现在我们对 VueRouter 的认知也在不断加深,稍微梳理下,路由的导航方式有:
- 声明式:
<router-link to="...">
- 命令式:
this.$router.push() | this.$router.replace
而导航的目标不仅可以是具体的地址路径、命名路由还可以是一个路径别名。