美文网首页
Vue 页面跳转提示和回退问题

Vue 页面跳转提示和回退问题

作者: 毛毛虫同学 | 来源:发表于2020-05-09 15:28 被阅读0次

    有些功能需求,要求页面在跳转时,如果有没有保存的修改或未完成的操作,提示用户是否保存。所以需要在离开当前页面之前做判断。

    
        //路由跳转时,需要拦截
    
        beforeRouteLeave (to, from, next) {
           // 判断数据是否修改,如果修改按这个执行,没修改,则直接执行离开此页面
           //this.isneedLeave 防止重复提示
            if(this.isChange() && this.isneedLeave == false){
              this.$confirm("有未保存的更改,确定要离开当前页面么?", "提示", {
                  iconClass: "el-icon-question",
                  cancelButtonClass: "button-cancel",
                  confirmButtonText: '留在页面',
                  cancelButtonText: '离开页面',
                  showClose:false,
                  closeOnClickModal:false,
                  type: 'warning'
              }).then(() => {
                next(false)
              }).catch(() => {
                next()
              })
            } else {
              if(this.isneedLeave == false)
              {
                 next(false)
              }else{
                next()
              }
            }
        },
    

    以上方法可以拦截路由跳转时,提示用户需要保存信息,但是浏览器回退时并不会触发beforeRouteLeave,导致confirm框闪现一下,所以需要在监听浏览器的事件。

    //页面初始化时监听
     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()
          {
            history.pushState(null, null, null)
            if(this.isChange()){
                this.$confirm("有未保存的更改,确定要离开当前页面么?", "提示", {
                  iconClass: "el-icon-question",
                  cancelButtonClass: "button-cancel",
                  confirmButtonText: '留在页面',
                  cancelButtonText: '离开页面',
                  showClose:false,
                  closeOnClickModal:false,
                  type: 'warning'
                }).then(() => {
                  }).catch(() => {
                  this.isneedLeave = true
                 //不能用go(-1),或者back之类的,不然页面就是死循环
                  this.$router.push({path:'/my/home'})
                })
              } else {
                  this.isneedLeave = true
                  if(this.$store.state.userInfo){
                    this.$router.push({path:'/my/home'})
                  }else{
                    this.$router.push({path:'/login'})
                  }
              }        
          } 
    }
    

    相关文章

      网友评论

          本文标题:Vue 页面跳转提示和回退问题

          本文链接:https://www.haomeiwen.com/subject/fqpknhtx.html