vue拦截(阻止)浏览器后退事件

栏目: 编程语言 · 发布时间: 5年前

内容简介:需求是这样的:用户在编辑页以及新增页面时,如果用户手动要跳转到其它页面,就出来一个弹窗提示用户巴拉巴拉。。。然后,使用vue的 beforeRouteLeave 路由守卫可以对一些路由操作进行跳转前提示,但是如果用户点了浏览器的后退按钮,那这个路由守卫基本没用了啊,那个弹窗就闪了一下就消失了,路由直接改变,但是页面不刷新(写这篇文章时,我在想,可能我的路由有问题,不然为什么路由变了,但是页面不刷新?)下面是代码,在App.vue里面添加:

需求是这样的:用户在编辑页以及新增页面时,如果用户手动要跳转到其它页面,就出来一个弹窗提示用户巴拉巴拉。。。

然后,使用vue的 beforeRouteLeave 路由守卫可以对一些路由操作进行跳转前提示,但是如果用户点了浏览器的后退按钮,那这个路由守卫基本没用了啊,那个弹窗就闪了一下就消失了,路由直接改变,但是页面不刷新(写这篇文章时,我在想,可能我的路由有问题,不然为什么路由变了,但是页面不刷新?)

下面是代码,在App.vue里面添加:

mounted () {
    if (window.history && window.history.pushState) {
      history.pushState(null, null, document.URL)
      window.addEventListener('popstate', this.goBack, false)
    }
  },
  destroyed () {
    window.removeEventListener('popstate', this.goBack, false)
  },
  methods: {
    goBack () {
      // 该事件仅在浏览器后退按钮被点击时触发
      let needCofirmRouter = ['/addPro']
      console.log(document.URL.split('#')[1])
      history.pushState(null, null, null)
      if (needCofirmRouter.indexOf(document.URL.split('#')[1]) > -1) {
        this.$confirm('请确认数据已保存,页面跳转后已填写的数据会被清空,是否继续跳转?', '提示', {
          confirmButtonText: '是',
          cancelButtonText: '否',
          type: 'warning'
        }).then(() => {
          // 这里不可以使用back,go(-1)等方法,不然会再次触发该事件进入死循环
          // this.$router.go(-1)
        }).catch((ms) => {
        })
      }
    }
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Lean Startup

The Lean Startup

Eric Ries / Crown Business / 2011-9-13 / USD 26.00

更多中文介绍:http://huing.com Most startups fail. But many of those failures are preventable. The Lean Startup is a new approach being adopted across the globe, chan ging the way companies are built and ......一起来看看 《The Lean Startup》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具