vue单页面实现当前页面刷新或跳转时提示保存

2020-06-14 05:55:22易采站长站整理
(http://note.youdao.com/favicon.ico)?')
if (answer) {
next()
} else {
next(false)
}
}

显示的提示框如下:

监听浏览器的刷新、页面关闭事件

但是,这个时候就实现了我们最终的需求了么?并没有,还有一步:用window.onbeforeunload监听浏览器的刷新事件,当然为了防止从当前单页面跳到其他页面之后,在刷新所在新的页面还会触发window上的onbeforeunload的问题,我们不仅要及时的添加onbeforeunload事件,更要及时删除此事件,下面有两种解决方法可供选择:

通过判断它的路由是否是当前需要添加禁止刷新的页面


mounted() {
window.onbeforeunload = function (e) {
if(_this.$route.fullPath =="/layout/add"){
e = e || window.event;
// 兼容IE8和Firefox 4之前的版本
if (e) {
e.returnValue = '关闭提示';
}
// Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
return '关闭提示';
}else{
window.onbeforeunload =null
}
}
};

在destory或者beforeDestory的生命周期中直接将onbeforeunload事件置空


mounted() {
window.onbeforeunload = function (e) {
e = e || window.event;
// 兼容IE8和Firefox 4之前的版本
if (e) {
e.returnValue = '关闭提示';
}
// Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
return '关闭提示';
}
};
destroyed() {
window.onbeforeunload = null
}

显示的提示框如下:

总结

最终,在beforeRouteLeave和onbeforeunload的共同作用下,这个刷新、跳转或者关闭等情况下需要提示保存的需求完美解决!但是,还有一点点小遗憾,就是onbeforeunload中弹框的自定义提示语设置始终无法生效,大家要是有更加合适的处理办法,欢迎多多交流指正!