vue-router beforeRouteLeave 引发的问题

发布于 2022-09-11 18:35:17 字数 843 浏览 10 评论 0

  1. 问题:
    用户需求是当用户在创建商品时,点击了左侧菜单,做一个离开提醒‘是否确定离开?’。
    如下实现:
    但是,出现一个问题:用户点击左上角浏览器回退按钮时,这个弹出提醒就会闪现,立马消失。请教大神们~~

      beforeRouteLeave(to, from, next) {
              console.log(' beforeRouteLeave !', this)
               if (this.isSubmit=='1' || this.saveLoading == true || this.cancleFlag ==true || this.previewFlag == true) { //去除这三种情况 不用离开提醒
                      next()
              } else {
                      this.$confirm('确定离开?请保存数据!', '提示', {
                              confirmButtonText: '确定',
                              cancelButtonText: '取消',
                              type: 'warning'
                              }).then(() => {
                                  next()
                              }).catch(() => {
                                  next(false)    
                      });
            }   
       },

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

谜兔 2022-09-18 18:35:17

解决方案

setTimeout(() => { // 此处必须要加延迟执行,主要解决浏览器前进后退带来的闪现
    this.$confirm('您的数据尚未保存,是否离开?', '离开页面', {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning'
    }).then(() => {
      next()
    }).catch(() => {
      next(false)
    })
  }, 200)
黯然#的苍凉 2022-09-18 18:35:17
beforeRouteLeave(to, from, next) {
  next(false)
  setTimeout(() => {
    this.$confirm('是否继续?', '提示', {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning'
 }).then(() => {
      this.$router.go(-1)
      next(false)
    }).catch(() => {
      next()
    })
  }, 100)
}
空心空情空意 2022-09-18 18:35:17

请问楼主这个问题解决了吗?我也遇到了

冷血 2022-09-18 18:35:17

同问,请问是怎么解决的。请教一下,可以说一下么

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文