vue中监听返回键

问题:在项目中,咱们经常有需求,当用户在填写表单时,点击返回的时候,咱们但愿加一个弹窗,确认离开吗,确认将保存为草稿html

解决方案:利用 H5的 pushstate(我的理解为增长页面栈)特性与onpopup事件vue

分析:pushstate 从该方法名咱们能够知道 是增长某种状态,会为history对象的length增长长度, 点击返回键的时候会触发onpopup事件(能够联想到 pop实际上是数组删除的最后一个元素,符合  ‘栈’ 的思想);数组

          onpopup触发返回上一页,而 pushstate仅仅是从url上进行了改变,不会校验url的内容,页面不会改变,加入当前页面为 xxx/b.html,此时pushState(null,null,'a.html'),能够发现 url变了,而页面的内容并无改变,咱们能够经过这来形成一种没法返回的假象this

实施:  url

      

 
//注意:Dialog是一款弹窗的插件
mounted: function() {
//当前页面挂载的时候调用 返回键的监听方法
this.listeningBack()

}

 //当页面销毁的时候咱们也要将事件监听销毁,以避免影响其余内容spa

 destroyed:function(){插件

   window.onpopstate = nullcode

},router

methods:{htm

    

//监听返回键
listeningBack() {

var that = this;//window.onpopstate方法指向window,因此要储存一下当前的vue实例
let route = '上一页';//根据业务逻辑的上一页决定
window.onpopstate = function() {

//将当前页面window.location.href 放入页面栈当中
history.pushState({}, null, window.location.href);
Dialog.alert({
title: '标题',
message: '确认返回吗,你所填写的内容将保存为草稿'
}).then(() => {
that.$router.push({

path:route

})
}).catch(
console.log('取消返回,留在当前页面')
);

 
 

}
},

}

相关文章
相关标签/搜索