导航守卫(也叫路由守卫)
导航守卫(也叫路由守卫)
- 作用: — 类似 【保安】
- 守卫路由
- 进
- 举例: 携带数据进
- 出
- 举例: 事情完成才能出
- 进
- 导航守卫一共有三种形式
- A: 全局导航守卫
. 全局前置守卫 router.beforeEach(fn)
- fn中有三个参数
- to:表示要去哪里
- from:表示从哪里来
- next:表示通不通过
- 关于next的使用
- next() 等价于 next( true ) 表示可以从当前路由跳转到目标路由
- next( false ) 表示不通过, 表示从当前路由跳转不到目标路由
- next(’/login’) 等价于 next({path:’/login’}) 跳转指定的路由
- next(’/login’) 等价于 next({path:’/login’,params,query})
- next( fn ) 数据预载
全局前置守卫是写在入口文件 main.js 中的,在进入路由前执行
// 全局前置路由守卫
router.beforeEach( (to,from,next) =>{const name = localStorage.getItem('name');//查看本地存储上是否有name对象if( name || to.path === '/login'){//短路逻辑,有就可以继续执行,没有就跳转到登录页面next()}else{next( '/login' )//跳转登录页面}
})// 全局后置路由守卫 router.afterEach(fn),表示离开当前路由时执行
router.afterEach( (to,from,next)=> {if(to.path === '/user'){//当to的path值等于这个时alert('确定进入user吗')}
})
- 全局的解析守卫
- 在 2.5.0+ 你可以用 router.beforeResolve 注册一个全局守卫。这和 router.beforeEach 类似,区别是在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用。
- 必须保证整个项目的守卫和异步路由组件解析完成
3. 全局的后置守卫 afterEach(fn)
- 可以做一些用户友好提示
代码在上面
B: 路由独享守卫
- 写在路由表中的守卫钩子
- 针对的是和当前路由相关的,那么其他与之不相关的路由,它是无法监听它的变化情况的
{path: '/user',
component: User,
beforeEnter: ( to,from,next ) =>{// console.log(to)const name = localStorage.getItem('name');//判断本地存储有没有name对象if( name){//存在就可以继续执行next()}else{setTimeout(()=>{alert('你还没有登录,点击跳转登录')//不存在就弹窗告诉没有登录,点击登录next('/login')},0)}}
},
C: 组件内守卫
- 有三种
- beforeRouteEnther( (to,from,next) =>{} ) 进入组件时触发【 //注意写法,fore route 】
- beforeRouteUpdate( (to,from,next) =>{} ) 数据改变时触发
- beforeRouteLeave( (to,from,next) =>{} ) 离开组件时触发
- 组件内的前置守卫 beforeRouteEnter((to,from,next)=>{})
- 导航进入组件时,调用
- this是访问不到的,如果非要访问this ,必须通过 next(vm=>{})访问
- 因为组件此时没有创建,所以没有this
- 案例: 数据预载(进入组件前就获得数据)
next(vm => { //vm指的就是组件const result = JSON.parse(res.data.slice(7,-1)).rp_result.categorysvm.$set(vm.category,'categorys',result)
})
组件内的后置守卫
- 离开组件时,调用
- this是可以访问到
//判断两个输入框是否有值输入,有就可以直接离开,没有弹窗告诉确定是否离开,防止误触
beforeRouteLeave(to,from,next){if(this.username && this.pwd){next()}else{if(confirm('你确定要离开吗')){//返回一个布尔值next()}else{next(false)}}
}
组件内的更新守卫( 路由传参和路由的接参 )
- 在当前路由改变,但是该组件被复用时调用
- 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
- 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
- 可以访问组件实例
this
导航守卫(也叫路由守卫)相关推荐
- 导航守卫又称为路由守卫
路由进阶部分 – 导航守卫( 路由守卫 ) 作用: - 类似 [保安] 守卫路由 进 举例: 携带数据进 出 举例: 事情完成才能出 导航守卫一共有三种形式 全局导航守卫用的时候写在主文件中(main ...
- Vue路由守卫(导航守卫)及使用场景
目录 前言 一.路由守卫是什么? 二.路由守卫全解析 先来看一下钩子函数执行后输出的顺序吧 1.全局路由守卫 2.组件路由守卫 3.路由独享守卫 单独介绍一下路由守卫钩子三个参数 前言 最近在学习vu ...
- vue 声明周期函数_vue-router路由守卫-上
1. 为什么要使用路由守卫?什么是路由守卫? 第一次认识路由守卫:之前我做过的小项目里面,我们直接在浏览器网址的地方进行修改就能跳转页面,这是不安全的,因此就需要路由守卫,实现通过路由拦截,来判断用户 ...
- 路由守卫 /路由拦截
1. 在访问一个页面的时候 也就是在进行路由跳转的时候,把这个跳转拦下来 做一些判断或者操作 然后来执行是继续访问这个页面还是执行别的操作 路由的导航守卫又叫 路由的生命周期函数 也叫 路由的钩子函数 ...
- Angular 路由守卫
1. 路由 Angular路由: 可以控制页面跳转:可以在多视图间切换: 2. 路由守卫 Angular路由守卫: 在进入或离开某路由时,用于判断是否可以离开.进入某路由::: return true ...
- vue2路由手动创建二级路由路由传参路由守卫打包上线
路由手动配置: #在@vue/cli创建的项目中,路由用法如下. 1.安装路由npm install vue-router@32:定义路由所需的组件(.vue文件)要实现页面about 和home两个 ...
- 路由守卫-最全没有之一(亲测)
什么是路由守卫? 路由守卫就是路由跳转的一些验证,比如登录鉴权(没有登录不能进入个人中心页)等等等 路由守卫分为三大类: 1. 全局守卫:前置守卫:beforeEach 后置钩子:afterEach ...
- vue-cli 初始化创建 vue2.9.6 项目路由守卫、封装axios、vuex
阅读目录 Vue如何封装Axios请求 1 安装axios 2 封装代码 axios 应用方式 Vue 中的路由守卫 使用演示 1 全局守卫 2 组件级守卫 3 单个路由独享的守卫 4 官网整个路由守 ...
- vue的三种路由守卫
路由守卫就是当⻚⾯跳转的时候会触发的钩⼦函数, vue⼀共给我们提供了三种路由守卫 全局路由守卫 前置守卫: router.beforeEach((to,from,next) => {}) to ...
最新文章
- TCP 协议面试灵魂 12 问 | 强势整理
- Leetcode 100. 相同的树 解题思路及C++实现
- JVM 面试题 87 题详解
- SQL开发技巧 join从句
- Material Design 组件之 CollapsingToolbarLayout
- Python与C之间的相互调用(Python C API及Python ctypes库)
- api地理编码_通过地理编码API使您的数据更有意义
- LeetCode MySQL 1211. 查询结果的质量和占比
- 心电图图平板运动测试软件,心电图和平板运动可以检查出心
- linux centos 安装rar,CentOS6.8 安装rar解压缩
- bzoj 1179: [Apio2009]Atm(Trajan+SPFA)
- day01 python入门之路
- 【使用技巧】【图像编辑和处理】将GIF图缩放
- Spring Framework 常用工具类一
- Linux文件系统的创建与管理(上)
- error:there‘s no Qt version assigned to project please assign a Qt installation in qt project settin
- 振铃效应与样点自适应补偿(Sample Adaptive Offset,SAO)技术
- 2021vue面试题+答案
- 计算机主板上电源供电缩写,新电脑电源标准开始普及?取消5V、3.3V供电,主板供电变为10PIN...
- 如何保存网站上的背景图片