当前位置: 首页 > news >正文

bug 记录 - 路由守卫 beforeRouteLeave 与 confirm 结合,不生效问题

需求说明

  • 每次离开页面前,需要弹窗提示页面内容未保存
    在这里插入图片描述
  • 原始代码
beforeRouteLeave(to, from, next) {Dialog.confirm({title: "标题",message: "退出当前页将丢失未保存内容",confirmButtonText: "留在当前",cancelButtonText: "确定退出",}).then(() => {next(false);}).catch(() => {next();});
},

发现问题

  • 第一次离开页面时,触发路由守卫,confirm 生效弹出。
  • confirm 选择"留在当前"时,即执行 next(false)
  • 再次离开页面时,触发路由守卫,但是 confirm 并未弹出,当前页面闪动。

问题解决

  • 只要进入路由守卫,优先拦截下来,然后再进行后续的操作,手动做一个延时
beforeRouteLeave(to, from, next) {next(false);setTimeout(() => {Dialog.confirm({title: "标题",message: "退出当前页将丢失未保存内容",confirmButtonText: "留在当前",cancelButtonText: "确定退出",}).then(() => {}).catch(() => {next();});}, 100);
},

完整案例

  • 另外可添加一些变量,用于标识,当前页面是否编辑过,或者退出页面时是否需要拦截
<template><div><el-form ref="form" :model="form" label-width="80px"><el-form-item label="活动名称"><el-input v-model="form.name"></el-input></el-form-item><el-form-item label="活动区域"><el-select v-model="form.region" placeholder="请选择活动区域"><el-option label="区域一" value="shanghai"></el-option><el-option label="区域二" value="beijing"></el-option></el-select></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">立即创建</el-button><el-button>取消</el-button></el-form-item></el-form></div>
</template>
<script>
import { Dialog } from "vant";export default {data() {return {form: {name: "",region: "",},lockFlag: false, // 锁 - 优先级最高的};},computed: {isEdit() {// 当前页面是否编辑过?let flag1 = this.form.name;let flag2 = this.form.region;return flag1 || flag2 ? true : false;},},beforeRouteLeave(to, from, next) {if (this.lockFlag) {// 一些不需要判断编辑状态的场合next();} else if (this.isEdit) {// 当前页面编辑过,先拦截住next(false);setTimeout(() => {Dialog.confirm({title: "标题",message: "退出当前页将丢失未保存内容",confirmButtonText: "留在当前",cancelButtonText: "确定退出",}).then(() => {}).catch(() => {next();});}, 100);} else {// 在当前页没做操作,直接走了next();}},methods: {onSubmit() {// 走个提交接口setTimeout(() => {this.$message({message: "保存成功",type: "success",});this.lockFlag = true; // 如果是保存成功,退出当前页时,就不要再进行编辑与否的判断了this.$router.back();}, 100);},},
};
</script>
http://www.dtcms.com/a/519414.html

相关文章:

  • 数据库字段类型bit容易被忽视的bug
  • centos 配置网络
  • [人工智能-大模型-55]:模型层技术 - AI的算法、数据结构中算法、逻辑处理的算法异同
  • LeetCode 3461.判断操作后字符串中的数字是否相等 I:简单题简单做的时候到了
  • IPhone 17 Pro Max拍摄专业画质视频教程
  • MoE大模型分布式训练:Switch Transformer与专家并行策略
  • 网站设置评价青岛企业网站建设优化
  • MySQL 增删改查操作与 SQL 执行顺序
  • 静态Web应用与JavaScript:现代前端开发的新范式
  • 按键精灵安卓/iOS脚本辅助,OpenCV实现自动化高效率工具
  • 2510rs,rust,1.90
  • 厦门小微企业网站建设补贴wordpress 评论弹幕
  • Prometheus(二)—— 在K8s集群中部署Prometheus+Grafana+AlertManager实现全方位监控
  • 论文学习_One Bug, Hundreds Behind: LLMs for Large-Scale Bug Discovery
  • 18.InnoDB 存储引擎(存储结构)
  • ⸢ 玖 ⸥⤳ 威胁感知与响应体系概念及建设思路
  • 芯谷科技--高性能直流有刷电机调速电路GS016
  • Shell脚本切换家庭和随身wifi网络配置
  • 化妆品网站建设方案项目书有区域名和主机怎么做网站
  • String[ ] 和 List<String> 的区别
  • el-table默认排序设置
  • 未来之窗昭和仙君(三十二)通用押金系统——东方仙盟筑基期
  • 【工具分享】对比 MeshCentral VNC 部署 与 Apache Guacamole VNC 部署
  • 废品回收小程序盈利密码:三方共赢模式拆解 + 避坑指南
  • ARM《2》_ARM的GNU汇编语言
  • 02_svm_多分类
  • 全面的 C#/.NET 图表构建解决方案
  • 未发表,三大创新!OCSSA-VMD-Transformer-Adaboost特征提取+编码器+集成学习轴承故障诊断
  • Linux网络HTTP(下)(9)
  • 网站权重值在较长时间内是一定的页面优化怎么做批量的网站检查