动态路由匹配

当需要把某种模式匹配到的所有路由,全部映射到同一个组件时,需要用到动态路由匹配,即在 vue-router 的路由路径中使用“动态路由参数” 来达到这个效果

例如,定义一个 User 组件,对于所有 username 各不相同的用户,都要使用这个组件来渲染

router.js

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter);

import User from '../pages/User'

export default new VueRouter({
    routes:[{
        path:'/user/:username',
        component:User
    }]
})

现在,像 /user/userA  和 /user/userB 都将会映射到相同的路由

User.vue

<template>
    <div>{{this.$route.params.username}}组件</div>
</template>

一个“路径参数” 使用冒号标记,当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用功能。

也可以在一个路由中设置多段“路由参数”,对应的值都会设置到 this.$route.params 中

 注意,当使用路由参数时,例如从 /user/userA 导航到 /user/userB ,原来的组件实例会被复用,因为两个路由都渲染同一个组件,不过,这也意味着组件的生命周期勾子不会再被调用。

 

响应路由参数的变化:

复用组件时,要对路由参数的变化作出响应的话,可以简单的 watch $route 对象

 或者使用 beforeRouteUpadate,路由守卫

捕获所有路由或 404 Not Found 路由

常规参数只会匹配被 / 分隔的URL片段中的字符,如果想匹配任意路径,可以使用通配符(*)

含有通配符的路由应该放在最后

路由 { path:' * ' } ,通常用于客户端 404 错误,如果使用了 history 模式,要确保正确配置你的服务器

当使用一个通配符时,$route.params 内会自动添加一个名为 pathMatch 参数,包含了URL通过通配符被匹配的部分

高级匹配模式

vue-router 使用 path-to-regexp 作为路由匹配引擎,所以支持很多高级的匹配模式,例如,可选的动态路径参数、匹配0个或多个、一个或多个、甚至是自定义正则匹配。

匹配优先级

有时候,同一个路径可以匹配多个路由,此时,匹配的优先级按照路由的定义顺序

 

posted @ 2021-01-30 19:28  shanlu  阅读(608)  评论(0编辑  收藏  举报