hash模式跟history的区别
-
首先是在 URL 的展示上,hash 模式有“#”,history 模式没有
-
刷新页面时,hash 模式可以正常加载到 hash 值对应的页面,而 history 没有处理的话,会返回 404,一般需要后端将所有页面都配置重定向到首页路由
-
在兼容性上,hash 可以支持低版本浏览器和 IE
说一下 router 与router与route 的区别
$route 对象表示当前的路由信息,包含了当前 URL 解析得到的信息。包含当前的路径,参数,query 对象等。
- $route.params: 一个 key/value 对象,包含了 动态片段 和 全匹配片段,如果没有路由参数,就是一个空对象。
- route.query:一个key/value对象,表示URL查询参数。例如对于路径/foo?user=1,则有route.query:一个 key/value 对象,表示 URL 查询参数。例如对于路径 /foo?user=1,则有 route.query:一个key/value对象,表示URL查询参数。例如对于路径/foo?user=1,则有route.query.user == 1,如果没有查询参数,则是个空对象。
- $route.hash:当前路由的 hash 值 (不带 #) ,如果没有 hash 值,则为空字符串。
- $route.fullPath:完成解析后的 URL,包含查询参数和 hash 的完整路径。
- $route.matched:数组,包含当前匹配的路径中所包含的所有片段所对应的配置参数对象。
- $route.name:当前路径名字
- $route.meta:路由元信息
$route 对象出现在多个地方:
- 组件内的 this.$route 和 route watcher 回调(监测变化处理)
- router.match(location) 的返回值
- scrollBehavior 方法的参数
- 导航钩子的参数,例如 router.beforeEach 导航守卫的钩子函数中,to 和 from 都是这个路由信息对象。
$router 对象是全局路由的实例,是 router 构造方法的实例。
$router 对象常用的方法有:
- push:向 history 栈添加一个新的记录
- go:页面路由跳转前进或者后退
- replace:替换当前的页面,不会向 history 栈添加一个新的记录
vueRouter 有哪几种导航守卫?
- 全局前置/钩子:beforeEach、beforeR-esolve、afterEach
- 路由独享的守卫:beforeEnter
- 组件内的守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave
解释一下 vueRouter 的完整的导航解析流程是什么
一次完整的导航解析流程如下:
-
1.导航被触发。
-
2.在失活的组件里调用离开守卫。
-
3.调用全局的 beforeEach 守卫。
-
4.在重用的组件里调用 beforeRouteUpdate 守卫(2.2+)。
-
5.在路由配置里调用 beforeEnter。
-
6.解析异步路由组件。
-
7.在被激活的组件里调用 beforeRouteEnter。
-
8.调用全局的 beforeResolve 守卫(2.5+)。
-
9.导航被确认。
-
10.调用全局的 afterEach 钩子。
-
11.触发 DOM 更新。
-
12.用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。