vue动态路由匹配

vue动态路由匹配

我们经常需要把某种模式匹配到的所有路由,全部映射到同个组件。例如,我们有一个User组件,对于ID各不相同的用户,都要使用这个组件来渲染。那么,我们可以在vue-router的路由路径中使用 “动态路径参数”(dynamic segment)来达到这个效果:

const User = {
  template: '<div>User</div>'
}

const router = new VueRouter({
  routes: [
    // 动态路径参数 以冒号开头
    { path: '/user/:id', component: User }
  ]
})

现在呢,像/usr/foo 和 /user/bar 都将映射到相同的路由。

一个“路径参数”使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。于是,我们可以更新 User 的模板,输出当前用户的 ID:

const User = {
  template: '<div>User {{ $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 文档 的详细说明。

 

举例:显示xx的页面

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo4</title>
</head>
<body>
<div id="app">
    <router-link to="/user/zs">张三</router-link>
    <router-link to="/user/ls">李四</router-link>
    <hr>
    <router-view></router-view>
</div>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<script>
    //写路由
    const routeArray=[
        {
            path:'/user/:name',
            component:{
                template:`<div>
                    <h1>这是{{$route.params.name}}的主页页面!</h1>
        </div>`
            }
        }
    ]
    //生成VueRouter实例
    const routerObj = new VueRouter({
        routes:routeArray
    })
    var app = new Vue({
        el:"#app",
        data:{},
        router:routerObj //将路由实例挂载到vue实例中
    })
</script>
</body>
</html> 

举例2: 获取url中的年龄和爱好

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo5</title>
</head>
<body>
<div id="app">
    <!--路由的入口-->
    <!-- 使用 router-link 组件来导航. -->
    <!-- 通过传入 `to` 属性指定链接. -->
    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
    <!--/index表示下面定义的path-->
    <router-link to="/user/张三">张三</router-link>
    <router-link to="/user/李四">李四</router-link>
    <hr>
    <!--路由的出口-->
    <!-- 路由匹配到的组件将渲染在这里 -->
    <router-view></router-view>
</div>

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<script>
    //写路由
    const routeArray = [
        {
            path:'/user/:name',
            component:{
                template:`<div>
                    <h1>这是{{$route.params.name}}的主页页面</h1>
                    <p>芳龄:{{$route.query.age}}</p>
                    <p>爱好:{{$route.query.hobby}}</p>
</div>`
            }
        }
    ]
    //生成VueRouter实例
    const routerObj = new VueRouter({
        routes:routeArray
    })
    var app = new Vue({
        el:'#app',
        data:{},
        router:routerObj  //将路由实例挂载到vue实例中
    })
</script>
</body>
</html>

  

 

 

 

 



posted @ 2018-07-28 12:03  John966  阅读(370)  评论(0编辑  收藏  举报