VUE导航守卫beforeRouteLeave实现路由跳转拦截

## 原创声明

本文系作者辛苦码字所得,欢迎分享和转载,但请在明显位置注明作者的如下信息:

笔名:来碗鸡蛋面

简书主页:[https://www.jianshu.com/u/4876275b5a73](https://www.jianshu.com/u/4876275b5a73)

邮箱:job_tom@foxmail.com

CSDN ID:tom_wong666

基本语法:

beforeRouteLeave (to,from, next) {

    // 必须调用next()

    // next(true)进入原计划的下个页面

    // next(false)进入from页面(即原本的页面)         

}

背景:

Vue做移动端,项目实际代码无法展示,写了一个示例demo见如下git地址:

https://github.com/tom-wong666/model.git

Demo说明:

A组件跳转到B组件,点击B组件的按钮打开其自带的C遮罩层(100%遮挡),C遮罩层自带关闭按钮用以返回(显示)B组件;

问题:

如果点击移动端的返回按钮(效果同点击浏览器左上方的回退按钮),页面跳回到A组件了,这和常理相悖,业务逻辑要求点击C遮罩层后应该返回B组件。

解决办法:

beforeRouteLeave (to, from, next) {

  // this.show是组件内定义的data用以判定v-if="show"是否成立

  if(this.show){

  //如果show为true是显示状态,则next(false)返回from的组件(B组件)

    this.show=false

      next(false);

  }else{

    //反之,则next(true)计入next组件(A组件)

      next(true);

  }       

}

注意:

beforeRouteLeave只在设置了router的第一级组件内有效!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容