路由
同一个路由可以由多个动态段,比如/root/:name
,如果匹配路径为/root/zss
,那么$route.params就是为{ name:'zss' }
,除此之外,$route
中还可以使用$route.query
或者$route.path
。
路由参数中使用正则表达式,路由中如何至少有一个不是斜杠的字符,我们可以使用正则表达式([^/]+)
来表示。当两个路由如果匹配完全相同的url时,我们可以通过在路径中增加一个静态部分来区分它们。如果web只能是数字,而vue可以为任何值时,我们可以使用圆括号中加正则表达式的形式来说明(\\d)
。如果想要匹配零个或者多个,我们可以使用*
修饰符。如果想要匹配一个或者多个,我们可以使用+
修饰符。如果想要将参数标记为可选的,使用?
修饰符。其中修饰符可以单独使用,也可以结合去使用。
const routes = [{
{ path: '/x/:web' },
{ path: '/y/:vue' }
}]
一个界面中也可以由多层嵌套组件组合而成。当我们在嵌套中渲染组件,我们需要在routes
选项中添加children
选项,这个里面是路由配置对象中的另一个数组,类似于routes
。如果嵌套路径为根路径,使用/
开头。我们可以在created生命周期使用this.$watch
去监听$route.params
变化,只有当路由参数的变化,才会被调用。$watch
方法中如果想要监听器回调函数在监听开始后立即执行,我们可以设置immediate: true
。
我们还可以用一个名称来标识路由,在根路径的配置中,使用redirect
可以将路径进行重定向我们命名的路由上面去。这样当我们访问ip地址时,就会直接跳转到我们设置的name的组件中。除此之外我们还可以将函数接收的目标路由作为参数,然后动态返回重定向的目标。这个返回值可以是重定向的字符串路径也可以是路径对象。router-link
中的to属性的值是表达式,所以需要使用v-bind指令。路由配置中还可以给路径设置一个别名,使用alias
进行设置,当path的路径为x,alias设置为y,那么我们访问y的时候,url显示的还是y,但是路径匹配的是x,相当于用于在访问x一样。我们需要注意的是,别名不是重定向,重定向时访问x的时候,url的地址会显示为y,匹配的路由也是y。这就是两者的区别。
{
path: '/',
redirect: '/web'
}
{
path: '/vue/:num',
redirect: to => { return { path: '/vue', query: { x: to.params.num } } }
}