原理
当前Vue项目一般都是单页面应用,也就是说vue-router是应用在单页面中的。
单页面应用:第一次进入页时候会请求一个html文件,当切换到其他组件的时候,路径也发生了相应的变化,但是并没有新的html文件请求额,页面内容却也发生了变化。
原理:JS可以感知到URL的变化,通过这一点可以用js动态的将当前页面的内容清除掉,然后将下一个页面的内容挂载在当前页面上。这个时候的路由不是由后端来做的,而是前端来做的,判断页面到底要显示哪个组件,然后清除掉不需要的,显示需要的组件,这个过程就是单页面应用,每次跳转的时候不再需要请求html文件了。
多页面应用:每一次页面跳转的时候,后台服务器都会返回一个新的html文档,这种类型的网站就是多页网站,也就是多页应用。
原理:传统的页面应用,使用一些超链接来实现页面切换和跳转的。
vue-router实现原理:更新视图但是不重新请求页面
vue-router常用的由有两种方式,hash模式和history模式
hash模式:使用url hash值来做路由,是默认模式
history模式:依赖html5 的historyAPI
hash模式:hash即浏览器URL中#后面的内容,相当于锚点,代表的是网页中的一个位置,单单改变#后面的部分,浏览器就会加载相应位置的内容,不会重新加载页面。hash模式通过锚点值的改变,根据不同的值来渲染指定DOM位置的不同数据。
history模式:利用history.pushState和history.replace API来完成url跳转而无需重新加载页面。
路由守卫
这些导航守卫其实都是一个个的钩子函数,每一个钩子函数除了afterEach之外,都有三个参数,分别是to,from,next。其中to和from是两个对象,中间包含了路由跳转前后的路径,next是一个函数,可以写一个路径,用来进行跳转
全局导航守卫
beforeEach
beforeResolve
afterEach
路由独享守卫
beforeEnter
组件私有守卫
beforeRouterEnter
beforeRouterLeave
路由传参
使用查询字符串
如果在路由中使用查询字符串给路由传递参数时,不需要修改路由规则的path属性。使用查询字符串传参的形式是:<router-link to='/path?id=10'></router-link>
通过这种方式传递参数的时候,在相对于的组件中调用$route.query
使用键就可以得到相应的参数
使用$route.params来传递参数
<router-link to='/login/12/ls'></router-link>
注意:使用这种方式,需要修改路由规则中的path属性,在此例中就要修改为{path:"/login/:id/:name",component:login}
这种规则是严格匹配的。如果to后面的属性不能完全匹配规则,就不会执行相应的规则进行路由跳转。