vue中组件导航守卫

beforeRouteEnter
beforeRouteUpdate (2.2 新增)
beforeRouteLeave

今天有遇到一个问题,就是在一个页面 新增模块按钮 和 编辑模块按钮 点击之后弹出框都是同一个子组件
在点击保存修改的时候调用的是同一个接口,那后台就找我们沟通说 新增按钮和 编辑功能的按钮 要发两次请求,意思就是把之前发一次请求,现在发两次。

首先拿到这个问题,我看到两个按钮点击之后都是通过this.$router.push 进行跳转的,跳转过去都有携带参数,我就想到了to,from,next 路由导航守卫。我在跳转的时候去传递参数。跳转之后拿到参数,根据参数去判断。

组件内的导航守卫,在组件渲染的时候,进行判断,大概解决思路就是这样的

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

beforeRouteEnter 守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。

不过,你可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。

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

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

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

这个离开守卫通常用来禁止用户在还未保存修改前突然离开。该导航可以通过 next(false) 来取消。

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

个人理解
在组件内的导航守卫中 ,只有 beforeRouterEnter中的next 才有回调函数,在这个回调函数中可以去操作组件实例,意思就是在这个回调函数中可以去操作data状态


越努力是越幸运,加油,干就完了

vue中的组件导航守卫,个人理解相关推荐

  1. 【Vue】vue中的路由导航守卫(路由的生命周期)

    文章目录 全局前置守卫 可选的第三个参数 `next` 全局解析守卫 router.beforeResolve 全局后置钩子 路由独享的守卫 组件内的守卫 可用的配置 API 使用组合 API 完整的 ...

  2. vue中对token的有效期的理解

    vue中对token的有效期的理解 保持登录是每个web页面必须要做的,不能一直不停的让用户进行登录,也不能让用户不登录就直接进入页面.token在保持登录中起到了非常重要的作用,我之前写过一篇博客, ...

  3. vue中组件的导出导入_5.2 vue中 keep-alive 组件的作用,详细解释keep-alive使用方法...

    问题:vue中 keep-alive 组件的作用 keep-alive:主要用于保留组件状态或避免重新渲染. 比如: 有一个列表页面和一个 详情页面,那么用户就会经常执行打开详情=>返回列表=& ...

  4. vue中父子组件先后渲染_Vue中父子组件执行的先后顺序

    前几天,朋友向我提出了一个关于Vue中父子组件执行的先后顺序问题,相信很多朋友在学习的过程中也会遇到这个问题,所以我就在此提出我自己的一些小看法. 问题如下:请问下图中父子组件执行的先后顺序? 首先, ...

  5. vue中父子组件及 watch用法

    父子组件及 watch vue中父子组件及 watch用法 - coder_zhang123456 - 博客园

  6. Vue中父子组件传值的多种方式

    vue中父子组件传值 vue中的父子组件传值,值得注意的是要遵守单向数据流原则.所谓单向数据流原则,简单的说就是父组件的数据可以传递给子组件,子组件也可以正常获取并使用由父组件传过来的数据:但是,子组 ...

  7. 通过大头儿子和小头爸爸,给女朋友讲明白了vue中父子组件的传值

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  8. Vue中父子组件的六种通信方式

    Vue中父子组件的通信方式 一.Props + $emit Props:父传子 父组件Parent.vue: <Child :message="message" @chang ...

  9. ant design vue 中Upload组件如何自定义文件列表的样式

    ant design vue 中Upload组件如何自定义文件列表的样式 问题 历程 UploadList 组件源码 h() 方法 实现 注 问题 技术:vue.ant design vue 在开发项 ...

最新文章

  1. VisualSVN server 无法启动
  2. java libpcap,Linux下编译安装libpcap
  3. [转]JavaScript优化方案
  4. div+css中常见的问题
  5. 高通Android平台下关于display部分的几个关键问题
  6. 《Android框架揭秘》——1.1节Android源代码组成
  7. 计算机绘图说课视频,电气工程制图说课ppt课件
  8. 如何下载省市县行政区划及乡镇边界
  9. ansys linux卸载干净,安装了几次ansys14.5,都没有成功,删除重新安装后许可安装不了了...
  10. C++用*和空格输出一个正方形及其对角线
  11. python批量ppt转图片,pdf转图片,word转图片脚本
  12. 汇编程序:查表求平方
  13. 为什么我从PR里面导出来的视频,在电脑上播放是正常的,微信发给朋友后,形状就变了,扭曲了一样的
  14. 汉语树库/CoNLL格式,依存句法分析语料
  15. 火狐浏览器提示响应已被截断(有效解决)
  16. 组合铣床的总体设计和主轴箱设计(论文+DWG图纸)
  17. 安装YLMF OS 5.0
  18. 患上散光后,应当如何治疗?
  19. 中国大数据技术精锐企业图谱
  20. html 超链接自动换行,url 关于自动换行问题

热门文章

  1. Linux疑难杂症解决方案100篇(十一)-ubuntu crontab 详细规则及不执行时的解决方法
  2. spring面试问题与答案集锦
  3. python的des和3des加解密
  4. Maven报错Missing artifact jdk.tools:jdk.tools:jar:1.7--转
  5. Java Annotations: Explored Explained--转载
  6. eclipse 常见问题及解决
  7. python评分卡建模-实现WOE编码及IV值计算
  8. 【功能升级】达摩盘3.0全新标签介绍前言
  9. vue项目部署到nginx
  10. Spring Boot:使用Rabbit MQ消息队列