可以在路由组件内直接定义路由导航守卫(传递给路由配置的)

可用的配置 API

  • beforeRouteEnter
    在渲染该组件的对应路由被验证前调用。
    此时不能获取组件实例 this
    因为当守卫执行时,组件实例还没被创建!
  • beforeRouteUpdate
    在当前路由改变,但是该组件被复用时调用。
    举例来说,对于一个带有动态参数的路径 /users/:id,在 /users/1/users/2 之间跳转的时候,由于会渲染同样的 UserDetails 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    因为在这种情况发生的时候,组件已经挂载好了,导航守卫可以访问组件实例 this
  • beforeRouteLeave
    在导航离开渲染该组件的对应路由时调用。
    可以访问组件实例 this
const UserDetails = {template: `...`,beforeRouteEnter(to, from) {},beforeRouteUpdate(to, from) {},beforeRouteLeave(to, from) {},
}

beforeRouteEnter 守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。
不过,可以通过传一个回调给 next 来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数:

beforeRouteEnter (to, from, next) {next(vm => {// 通过 `vm` 访问组件实例})
}

注意 beforeRouteEnter 是支持给 next 传递回调的唯一守卫。对于 beforeRouteUpdate 和 beforeRouteLeave 来说,this 已经可用了,所以不支持 传递回调,因为没有必要了。

beforeRouteUpdate (to, from) {// just use `this`this.name = to.params.name
}

这个 离开守卫 通常用来预防用户在还未保存修改前突然离开。该导航可以通过返回 false 来取消。

beforeRouteLeave (to, from) {const answer = window.confirm('Do you really want to leave? you have unsaved changes!')if (!answer) return false
}

完整的导航解析流程

官方提供:

  1. 导航被触发。
  2. 在失活的组件里调用 beforeRouteLeave 守卫。
  3. 调用全局的 beforeEach 守卫。
  4. 在重用的组件里调用 beforeRouteUpdate 守卫(2.2+)。
  5. 在路由配置里调用 beforeEnter
  6. 解析异步路由组件。
  7. 在被激活的组件里调用 beforeRouteEnter
  8. 调用全局的 beforeResolve 守卫(2.5+)。
  9. 导航被确认。
  10. 调用全局的 afterEach 钩子。
  11. 触发 DOM 更新。
  12. 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

Vue Router 组件内的守卫、导航解析流程相关推荐

  1. 当使用this.$router.back()或者this.$router.go(-1)返回上一页时,搭配组件内路由守卫,屏幕闪烁和跳转页面错误问题

    当使用this.$router.back()或者this.$router.go(-1)返回上一页时,搭配组件内路由守卫,屏幕闪烁和跳转页面错误问题 问题描述:项目有这个需求,当页面的输入框内容填完之后 ...

  2. 全局路由守卫,独享路由守卫,组件内路由守卫

    路由守卫: 1.作用:对路由进行权限控制 2.分类:全局路由守卫,独享路由守卫,组件内路由守卫 3.全局路由守卫:在router=>index.js const routes =[ {path: ...

  3. vue路由安全守卫 (组件内路由守卫)

    组件内部的路由守卫 基本形式: export default {name: "Cart",beforeRouteEnter(to, from, next) {// 进入当前组件 当 ...

  4. vue 一个组件内多个弹窗_论如何用Vue实现一个弹窗-一个简单的组件实现

    前言 最近在使用element-ui框架,用到了Dialog对话框组件,大致实现的效果,跟我之前自己在移动端项目里面弄的一个弹窗组件差不太多.然后就想着把这种弹窗组件的实现方式与大家分享一下,下面本文 ...

  5. vue 一个组件内多个弹窗_使用vue实现各类弹出框组件

    简单介绍一下vue中常用dialog组件的封装: 实现动态传入内容,实现取消,确认等回调函数. 首先写一个基本的弹窗样式,如上图所示. 在需要用到弹窗的地方中引入组件: import dialogBa ...

  6. vue在组件内实现对图标的显示与隐藏

    在项目中需要在页面A调用页面B.页面B在页面A被调用时,肯定需要实现只读,禁用所有功能.因为页面B上的一个按钮是自己写的,没有disable功能,只能根据条件把他隐藏掉. 在使用时发现语句有问题,在所 ...

  7. Vue Router路由管理器

    目录: 相关理解 基本路由 几个注意事项 嵌套(多级)路由 路由的query参数 命名路由 路由的params参数 路由的props配置 路由跳转的replace方法 编程式路由导航 缓存路由组件 a ...

  8. Vue 路由 导航守卫(全局守卫、路由独享守卫、组件内守卫)

    一.全局守卫 1. router.beforeEach((to,from,next)=>{}) 2. 回调函数中的参数,to:进入到哪个路由去,from:从哪个路由离开,next:函数,决定是否 ...

  9. 导航守卫之组件内守卫及后置钩子

    一.路由守卫 1.只有点击路由Admin时才会打印消息,并处于点击前的页面 2.只有点击路由Admin时才会打印消息,显示的是点击后的页面:但如果是next(false)则页面不会跳转 3.路由独享守 ...

最新文章

  1. 聚合类新闻client初体验
  2. arthas使用示例:profiler火焰图(CPU)
  3. bean加载context idea_02-基于IDEA创建SpringBoot项目并进行入门分析
  4. crontab定时任务中文乱码问题
  5. 观看实验中微型计算机虚拟拆装演示,虚拟仿真实验 北斗一号微机原理虚拟仿真实验系统64位 v3.0...
  6. 原生js实现jquery库中选择器的功能(jquery库封装一)
  7. debian 安装java_debian9安装jdk1.8
  8. JAVA的节点流和处理流
  9. 有做行业站的转行做企业站的吗?
  10. Kubernetes网络模型概念
  11. 让我小猪佩奇教你如何进行潇洒装逼
  12. URAL 1001 Reverse root
  13. 【机器学习系列】变分推断第一讲:Variational Inference背景和用途
  14. 新闻管理系统的设计与实现
  15. 对抗机器学习论文-BackdoorBench: A Comprehensive Benchmark of Backdoor Learning
  16. 手机浏览器的扫一扫功能在哪里,有什么作用
  17. onBlur和onChange冲突解决方法
  18. 前端学习笔记:微信内置浏览器拨打电话
  19. Visual Studio 好用的插件
  20. 华为 5G 欧洲崛起!

热门文章

  1. 移动手机版网页模板集合
  2. 六年级计算机考试实验操作,小学科学实验操作考试试题(六年级)
  3. 华硕ROG枪神5怎么样?测评值得买吗?详细性能点评
  4. Android SharedPreferences★★★★
  5. 深力科电子/J30H10K 100A 30V 电动工具专用N沟道MOS管
  6. 输出size大于10K的文件名字(simple)
  7. 第二十七章 数据劫持
  8. iOS 8.4.1完美越狱工具发布:老设备福音
  9. Apollo Lattice Planner学习记录
  10. Java设计模式(23种)