vue-router

路由

(一) SPA(single page application)

通过路由规则匹配到的组件,将会被渲染到router-view所在的位置

  • 定义路由组件
  • 配置路由规则并创建路由实例
    1
    2
    3
    4
    5
    6
    const router=new VueRouter({
    routes:[{
    path:'/user'
    component:User
    }]
    })
  • 把路由挂载到Vue根实例中
1
2
3
4
5
6
const  vm=new Vue({
el:'#app',
data:{},
//挂载路由实例对象
router
})

(三)重定向

1
2
3
4
5
6
7
const router=new VueRouter({
//所有的路由规则
routers:[
{path:'/',redirect:'/user'},
{path:'/user',component:User}
]
})

(四)动态匹配路由

1
2
3
4
解决路径前面一致要很多个路由
<router-link to='/user1'> 我是User1 <router-link>
<router-link to='/user2'>我是User2 <router-link>
<router-link to='/user3'> 我是User3<router-link>

//解决办法:

1
2
3
4
5
6
7
8
9
10
var router=new VueRouter({
routes:[{
path:'/user/:id',
component:User
}]
})

const User={
tempalte:<div>{{$route.params.id}}</div>
}

(五)路由嵌套

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
父组件:
<router-link to='/User'>我是User1</router-link>
<router-link to='/Regsiter'>我是Regsiter</router-link>
<router-view><router-view>

配置路由:
var router=new VueRouter({
routes:[{
path:'/user'
component:'User'
},
{
path:'/regsiter'
component:'Regsiter',
children:[{
path:'/regsiter/tab1',
component:Tab1
},
{
path:'/regsiter/tab2',
component:Tab2
}]
}]
})
const Regsiter={
<h1>Regsiter<h1>
<router-link to='/regsiter/tab1'>tab1</router-link>
<router-link to='/regsiter/tab2'>tab2</router-link>
<router-view></router-view>
}

传参

  • 父向子传参
  • 子向父传参
  • 非父子关系组件传参
  • 路由实例向组件中传参
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    (1)props:true
    const router=new vueRouter({
    routes:[
    path:'/user/id',
    component:User,
    props:true]
    }),
    var User={
    props:['id'],
    template:<div>ueser:{{id}}</div></div>
    }

    (2)props:对象
    const router=new vueRouter({
    routes:[path:'/user/id',
    component:User,
    props:{name:'wyy',age:17}]
    }),
    var User={
    props:['name','age'],
    template:<div>ueser:{{name}}--{{age}}]}</div></div>

    (3)函数

导航

  • 声明式导航:
    1
    <a></a>  <router-link></router-link>
  • 编程式导航:
    1
    2
    3
    常用的编程式导航API如下:
    (1)this.$router.push('hash地址')
    (2)this.$router.push.go(n)