# vue笔记
# vue路由是为了什么
- 为了单页面应用,切换不同的组件进行渲染展示
- 前后端没有分离的时候,比如thinkphp,django这些后端框架做的web,切换功能时基本都是, 每个url请求一次后端服务器数据,然后浏览器渲染页面
- vue 既然是单页面,每个功能切换都只变动需要渲染的组件,这样避免一些相同的模块重新渲染。
- vue的多页面,实际就是写多个vue单页面应用,来回切换入口,就是不同的应用。
# vue路由器怎么访问
- 在每个组件都可以用this.$router 访问整个路由器对象
- 在每个组件内可以用this.$route 访问当前路由对象
# 2. 动态路由匹配
- this.$route.params 参数是动态路由的参数,比如 /user/:username/post/:post_id
{username:'xxxxx', post_id:'bbbb'}
1
- this.$route.query 是url问号后面的k=v, 也是json对象
- 可以用watch监视$route对象的变化,比如变化了执行某个方法,刷新数据; 因为是同一个组件,只是参数变化,vue不会重新渲染
- 也可以用路由守卫 beforeRouteUpdate监视路由变化
- 其他高级操作.....
# 3. 嵌套路由
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User,
children: [
{
// 当 /user/:id/profile 匹配成功,
// UserProfile 会被渲染在 User 的 <router-view> 中
path: 'profile',
component: UserProfile
},
{
// 当 /user/:id/posts 匹配成功
// UserPosts 会被渲染在 User 的 <router-view> 中
path: 'posts',
component: UserPosts
}
]
}
]
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- 同一个user下面的profile组件和post组件, 需要children字段,里面类似路由(path和component)
# 4. 编程式的导航(a标签)
- 一般我们都用route-link :to 的 方式定义a标签跳转
- 也可以用定义一个click事件, 事件触发时 执行this.$router.push("/login") 这就是向histrory栈加入一条链接记录,push相当于点击a标签链接。
- 2.2.0+ 以后才有this.$router.push方法。
- this.$router.replace 类似push方法,是替换当前history记录,不是追加
- router.go(1) 前进一步
- router.go(-1) 后退一步
- router.go(3) 前进三步
- router.go(100) 记录不够,就默默失败