vue页面返回只关闭弹窗,不后退页面路由vue-router
Demo 代码功能点
- vue-router.js实现手机点返回键,只关闭弹窗,页面不后退
- vue js监听页面返回,不后退页面路由
- 点击浏览器返回按键,只关闭dialog对话框,不返回页面路由
- 手机SPA单页vue应用,全屏对话框弹出的时候,safari点击返回,只关闭弹窗,重写浏览器返回事件
- 监听chrome浏览器返回事件,重写页面返回行为,只关闭全屏对话框,不做history.back()
- vue-router beforeRouteLeave 禁止页面返回,停留当前页面
- vue-router beforeRouteLeave 阻止浏览器返回,保持当前路由不动
Demo 完整代码
<template> <div> <button @click="back">Back</button> <el-dialog class="configDialog" title="设置弹窗" :visible.sync="dialogVisible">全屏对话框</el-dialog> </div> </template> <script> export default { data() { return { dialogVisible: false }; }, beforeRouteLeave(to, from, next) { // 有全屏弹窗的时候,只关闭弹窗,不返回页面 // 没有弹窗的时候,正常返回页面(浏览器后退) if (this.dialogVisible) { this.dialogVisible = false; next(false); } else { next(); } }, methods: { back() { this.dialogVisible = true; } } }; </script>
使用的依赖包、版本号信息
package.json dependencies "vue": "2.6.11", "vue-router": "3.1.6",
vue-router 重写浏览器返回事件,就轻轻松松解决了。有全屏弹窗的时候,只关闭弹窗,不返回页面;没有弹窗的时候,正常返回页面(浏览器后退)。