路由守卫的基本了解

593 阅读3分钟

什么是路由守卫? vue-router有哪几种路由守卫?

如果面试官问你什么是路由守卫你会怎么回答?
路由守卫又称导航守卫,指的是路由跳转前,中,后过程中的一些钩子函数。官方解释是vue-router提供的导航守卫,要通过跳转或取消的方式来守卫导航。
路由守卫分三种:全局路由,组件内路由,路由独享

全局路由钩子函数有

beforeEach, beforeResolve, afterEach(参数中没有next)

组件内路由的钩子函数有

beforeRouterEnterbeforeRouteUpdatebeforeRouteLeave

路由独享的钩子函数有:

beforeEnter

什么是路由守卫?
  • 设备和ip的映射关系
  • 接口和服务器的映射关系
  • 路径和组建的映射关系

路由守卫的使用使用场景

首先我们想一想,如何给路由添加一个权限判断?
例如:用户在登陆状态下就你渠道某页面,但是未登录就会给你弹出一个未登录的提示。
路由守卫的目的是实现这样一个权限判断,在路由跳转之前,会触发一个函数
例如:

//语法:router.beforeEach((to,from,next) => {}
 
let isLogin = false; //未登录
router.beforeEach((to,from,next) => {
//路由跳转“之前”先执行这里,决定是否跳转
if (to.path === '/yourLogin' && isLogin === false) {
alert("请登录”)
next(false) //阻止路由跳转
}else {
next() //正常放行
}
})

路由之间是怎么跳转的?有那些方式?
1、<router-link to="需要跳转到页面的路径">

2this.$router.push()跳转到指定的url,并在history中添加记录,点击回退返回到上一个页面

3this.$router.replace()跳转到指定的url,但是history中不会添加记录,点击回退到上上个页面

4this.$touter.go(n)向前或者后跳转n个页面,n可以是正数也可以是负数
vue-router怎么分配路由的?
1. 引入vue-router.js
2. 配置路由path和组件, 和生成路由对象
3. 把路由对象配置到new Vue中router选项下
4. 页面使用<router-view></router-view> 承载路由
5. <router-link to="要跳转的路径"></router-link> 设置路由导航(声明式导航方式/编程式跳转)

vue-router钩子函数有哪些?

关于vue-router中的钩子函数主要分为3类:
全局钩子函数主要包含beforeEach

beforeEach函数有三个参数,分别是:
to: router即将进入的路由对象
from: 当前导航即将离开的路由
next: function,进行管道的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的) 否则为false, 终止导航

单独独享组件
beforeEnter

组件内钩子:
beforeRouterEnter,beforeRouterUpdate,beforeRouterLeave
怎么定义vue-router的动态路由?怎么获取传递过来的动态参数?
动态路由指的就是path路径上传值,前提需要路由规定了前提配置/path/:key名,获取使用$route.params.key名来提取对应用路径传递过来的值
vue路由实现模式:hash模式和history模式
hash模式:在浏览器中符号"#",#以及#后面的字符称之为hash,用window.location.hash 读取。
特点: hash虽然在URL中,但不包括在HTTP请求中;用来指导浏览器动作,对服务器端,安全无用,hash不会重复加载页面

history模式:history采用了HTML5的新特新;且提供了两个新方式:pushState(),replaceState()可以对浏览器历史记录进行修改,以及popState事件监听到状态变更
路由配置项常用的属性及作用:
path:跳转路径
compoent:路径相对于的组件
name:命名路由
children:子路由的配置参数(路由嵌套)
props:路由解耦
redirect:重定向路由
编程式导航使用的方法以及常用的方法
路由跳转: this.router.push()路由替换:this.router.replace()
后退:this.router.vack()前进:this.router.forward()
vue如何去除URL中的#
vue-router 默认使用 hash 模式,所以在路由加载的时候,项目中的URL会自带 '#',如果不想使用'#',可以使用vue-router的例外一种模式 history:new Router({ mode:'history',routes:[]})

需要注意的是,当我们启用 history 模式的时候,由于我们的项目是一个单页面应用,所以在路由跳转的时候,就会出现访问不到静态资源而出现 “404” 的情况,这时候就需要服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 “index.html” 页面。
route 和 router 的区别

route是路由信息对象,包括:'path,hash,query,fullPath,matched,name'等路由信息参数;
router是路由实例对象,包括了路由的跳转方法,实例对象等