Vue页面内容未保存时离开页面做弹框提示

一、背景

目标:如果当前页面中有正在编辑中的内容,那么此时切换组件、跳转路由、关闭标签页、刷新页面,都会有离开确认提示,防止用户因误触导致填写的内容白费。

        后台管理系统中有许多需要填写的表单,弹窗方式的表单一般都会关掉或提交,而单页个面的表单,有时候会忘记暂存或提交,直接离开页面,导致千辛万苦填写的内容全部置空,这是非常不友好的!!!于是,需要实现一个功能:如果当前页面中存在编辑中的内容,那么离开页面之前,要弹窗提示用户是否确认离开。

二、实现

1、路由守卫

        考虑到会有许许多多个编辑表单的单页面,所以将编辑状态存在store里,并通过路由守卫来判断是否弹出弹窗。

①store/router.js

const state = {// 定义全局的 isEditing 状态  isEditing: false  
}const mutations = {// 定义修改 isEditing 状态的 mutation  SET_EDITING(state, isEditing) {  state.isEditing = isEditing;  }  
}const actions = {setEditing({ commit }, data) {commit('SET_EDITING', data)}
}export default {namespaced: true,state,mutations,actions
}

②路由守卫

import router from '../router'
import store from '../store'
import { MessageBox } from 'element-ui'
// 其它......router.beforeEach(async(to, from, next) => {// 其它......if(!store.state.router.isEditing){ //页面中无正在编辑内容await routerPermission(to, from, next)}else{//页面中含有正在编辑内容MessageBox.confirm('您所做的更改暂未保存,确认离开页面?', '温馨提示', {  confirmButtonText: '离开',  cancelButtonText: '取消',  type: 'warning'  })  .then(async() => {  store.commit('router/SET_EDITING', false)// 用户点击了确认,执行跳转 ==> 进入页面权限判断await routerPermission(to, from, next)})  .catch(() => {  // 用户点击了取消或关闭了对话框,阻止路由跳转  next(false); // 传入 false 来取消导航  });  }// 其它......
})

        通过这种全局的方式,可以在任何需要有这种判断的地方让isEditing变成true即可。下面是一个例子:

    isEditProp(newVal) {this.isEdit = newValif(newVal===false){this.$emit('update:showEdit', false)}// 如果是整个表单一次性提交,则编辑状态下离开页面需要提示if(this.isAllAtOnce){this.$store.commit('router/SET_EDITING', newVal)}}

2、关闭标签页/刷新页面提示

        如果用户填写一半,不小心关闭标签页或者刷新页面,也会导致表单清空,这也是一种很糟糕的情况,所以,我们还需要一个关闭标签页提示。

  mounted() {window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))},beforeDestroy() {window.removeEventListener('beforeunload', e => this.beforeunloadHandler(e))},methods: {beforeunloadHandler(e) {this._beforeUnload_time = new Date().getTime()e = e || window.eventif (e && this.$store.state.router.isEditing) {e.returnValue = '关闭提示'}return '关闭提示'},}

 3、组件切换

          对于tabs页面,切换视图并不会引起路由变化,所以路由守卫就不起作用了,这个时候,我们就要在组件切换之前进行提示。

①给el-tabs绑定一个事件:before-leave="confirmLeave"

  <el-tabs:value="actived"class="tabs-container"v-bind="$attrs"@tab-click="tabClick":before-leave="confirmLeave">......</el-tabs>

②写提示方法

  methods: {async confirmLeave(pane){if(pane!=='flimLibrary' && this.$store.state.router.isEditing){return await this.$confirm('您所做的更改暂未保存,确认离开页面??', '温馨提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {this.$store.commit('router/SET_EDITING', false)this.$emit('update:actived', pane)this.isIgnore = truereturn true}).catch(() => {this.isIgnore = falsereturn reject()})}}},

        这样处理之后就成功实现了预期的效果啦!

三、 效果

①切换组件/跳转路由

②关闭标签页

③刷新页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 循环语句

在Python当中&#xff0c;循环语句用于重复执行特定的代码块&#xff0c;知道某个条件不再满足为止。Python中常用的循环有两种&#xff1a;for 循环 和 while 循环&#xff0c;下面我会分别详细解释它们的用法和特点 for 循环 for循环用于遍历可迭代对象(iterable)&#xff0…

“暗蚊”黑产团伙通过国内下载站传播Mac远控木马攻击活动分析

黑客&网络安全如何 1 概述 近期&#xff0c;安天CERT发现一组利用非官方软件下载站进行投毒和攻击下游用户案例&#xff0c;并深入分析了攻击者在网管运维工具上捆绑植入macOS平台远控木马&#xff0c;利用国内非官方下载站发布&#xff0c;以此取得政企机构内部…

计算机SCI期刊,IF=13.3+,期刊质量非常高,声誉佳

一、期刊名称 INTERNATIONAL JOURNAL OF COMPUTER VISION 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;13.369 中科院分区&#xff1a;2区 三、期刊征稿范围 《国际计算机视觉杂志》详细介绍了这一快速发展的领域的科…

XSS学习(绕过)

学习平台&#xff1a;xss.tesla-space.com XSS学习&#xff08;绕过&#xff09; level1level2level4level5level6level7level8level9level10level11level12 level1 应该没有过滤 https://xss.tesla-space.com/level1.php?name<script>alert(1);</script> leve…

探索AI绘画工具的前沿:创新科技与艺术的无缝融合

在科技和艺术交织的时代&#xff0c;AI绘画工具以其独特的魅力引领着创作的新潮流。本文将带您深入了解AI绘画工具的前沿技术&#xff0c;并通过最新例子展示其实际应用和潜力。 AI绘画工具概述 AI绘画工具通过集成深度学习、自然语言处理等技术&#xff0c;实现了从文字描述…

Dubbo-使用zookeeper作为注册中心时节点的概述

本文内容很容易理解&#xff0c;会阐述当dubbo使用zookeeper作为注册中心时候&#xff0c;zookeeper节点是什么样子的 本文的代码使用的dubbo版本是2.7.x&#xff0c;几年前的版本了&#xff0c;但是不影响探究 首先我们创建一个简单的maven项目&#xff0c;然后写出一段dubb…

第二篇: 掌握Docker的艺术:深入理解镜像、容器和仓库

掌握Docker的艺术&#xff1a;深入理解镜像、容器和仓库 1. 引言 1.1 简要介绍Docker的重要性 在当今快速发展的技术世界中&#xff0c;软件开发和部署的效率和可靠性是衡量成功的关键因素。Docker&#xff0c;作为一个开源的容器化平台&#xff0c;革新了软件的打包、分发和…

【S32K 进阶之旅】 将 EB 配置生成的 MCAL 代码集成到 S32DS 中

本文介绍如何使用 S32DS 进行 AUTOSAR MCAL 工程的编译和调试&#xff0c;重点在于将 EB 配置生成的 MCAL 代码集成到 S32DS 中。 虽然配置过程较为繁琐&#xff0c;实操过一遍就会熟悉整个工程的框架。以后每次在 EB 中更新配置&#xff0c;生成代码的文件夹已经集成在 S32DS…

python反序列化知识点学习

最近遇到了python反序列化的题目&#xff0c;简单学习一下相关的知识点 基础知识 Python 的序列化指的是将 Python 对象转换为一种格式&#xff0c;以便可以将其存储在文件或通过网络传输。Python 中最常用的序列化模块是 pickle 模块。 序列化使用的是pickle.dumps方法&…

【权威出版/投稿优惠】2024年智慧城市与信息化教育国际会议(SCIE 2024)

2024 International Conference on Smart Cities and Information Education 2024年智慧城市与信息化教育国际会议 【会议信息】 会议简称&#xff1a;SCIE 2024 大会时间&#xff1a;点击查看 大会地点&#xff1a;中国北京 会议官网&#xff1a;www.iacscie.com 会议邮箱&am…

视觉应用线扫相机速度反馈(伺服转盘)

运动控制实时总线相关内容请参考运动控制专栏&#xff0c;这里不再赘述 1、运动控制常用单位u/s运动控制单位[u/s]介绍_运动控制 unit是什么单位-CSDN博客文章浏览阅读176次。运动控制很多手册上会写这样的单位&#xff0c;这里的u是英文单词unit的缩写&#xff0c;也就是单位…

拓保全方位赋能,构建证券数字化蓝图

证券行业是我国金融业的重要基石&#xff0c;证券行业加速发展有利于拓宽融资渠道&#xff0c;释放市场活力&#xff0c;促进我国经济健康、普惠、持续高质量发展。作为深耕行业的软件信息服务提供商&#xff0c;拓保从顶层设计的高度上&#xff0c;构建证券数字化转型蓝图&…

ctfshow web 单身杯

web签到 <?phperror_reporting(0); highlight_file(__FILE__);$file $_POST[file];if(isset($file)){if(strrev($file)$file){ //翻转函数include $file;}}要进行反转并且包含文件用data协议 自己写不好写可以用函数帮你翻转 <?php $adata:text/plain,<?eval(…

黄金价格与美元的关系变了?

在一些传统的定价框架中&#xff0c;现货黄金的价格走势取&#xff0c;决于美元的实际利率水平——实际利率越高&#xff0c;黄金价格越低&#xff0c;反之亦然。在大多数的时候&#xff0c;美元的实际利率决定了美元指数的高低所以人们通常认为&#xff0c;现货金价与美元呈反…

基于深度学习的鸟类检测识别系统【python源码+Pyqt5界面+数据集+训练代码 MX_003期】

简介&#xff1a; 基于深度学习的鸟类检测识别系统在当今世界中具有广泛的应用前景。系统不仅可以帮助生态学家和保护人员监测和保护鸟类种群&#xff0c;还能在农业管理、城市生态监测以及科学研究领域发挥重要作用。通过自动化的图像识别技术&#xff0c;可以实现对鸟类种类、…

26 岁的“天才少年”,带队面壁打通高效大模型之路

每一轮技术浪潮出现时&#xff0c;冲在最前面的都是朝气蓬勃的年轻人。 当大模型代表的人工智能浪潮席卷全球&#xff0c;作为移动互联网“原住民”的年轻开发者&#xff0c;可以说是最活跃的群体。他们的脸庞还有些稚嫩&#xff0c;但在技术和方向上有着自己的想法&#xff0…

西格玛 ------ 第18个希腊字母学习

名词解释 在数学中&#xff0c;我们把∑作为求和符号使用&#xff0c;用小写字母σ&#xff0c;表示标准差。 ∑符号表示求和&#xff0c;读音为sigma&#xff0c;英文意思为Sum&#xff0c;Summation&#xff0c;汉语意思为“和”“总和”。 例1 公式使用说明&#xff1a;…

python图像处理库-PIL(Pillow)

PIL库全称为Python Imaging Library&#xff0c;即Python图像处理库&#xff0c;是一个在Python中用于处理图像的非常流行的库。 一、PIL介绍 这个库提供了广泛的文件格式支持、高效的内部表示以及相当强大的图像处理功能。 核心图像库旨在快速访问存储在几种基本像素格式中的数…

元数据:数据的罗塞塔石碑

在大数据时代&#xff0c;我们每天都在生成和处理海量数据。但数据本身&#xff0c;如果没有适当的上下文和描述&#xff0c;就像是一堆没有翻译的古老文字。这就是元数据发挥作用的地方——它是大数据世界的罗塞塔石碑&#xff0c;为我们提供了理解和利用数据的关键。 文章目录…

计算机组成原理之存储器(一)

文章目录 存储器概述存储器的分类情况按照存储器在系统中的作用分类按存储介质分类按存取方式分类 主存储器的技术指标 存储器概述 程序的局部性原理&#xff08;构成多级存储系统的依据&#xff09;&#xff1a;在某一个时间段你频繁访问某一局部的存储器地址空间&#xff0c;…