vue实现提示保存后退出的方法
下面我就为大家分享一篇vue实现提示保存后退出的方法,具有很好的参考价值,希望对大家有所帮助。
假设有这样一个需求,用户在一个页面内编辑文字,但是并未点击保存并且跳转到了下一个路由。比较好的做法应该是给出一个提示—“您编辑的内容还未保存,是否确认退出?”用户如果点击“确定”,那么不保存当前内容直接退出,用户如果点击“取消”,则取消本次路由跳转,继续留在原来的页面。
尝试的错误做法
一开始的时候我是想着使用vuex结合vue router的beforeEach导航守卫来实现。代码如下:
首先在vuex中新增一个状态值—introduceState
const store = new Vuex.Store({ strict: true, // process.env.NODE_ENV !== 'production', 直接修改state 抛出异常 state: { .... introduceState: false, .... }, getters: { introduceState: state => state.currentMenus }, mutations: { // 更新introduceState的值 changeIntroduceState (state, value) { state.introduceState = value } } })
用户在点击跳转到另一个页面的时候会触发生命周期函数beforeDestroy,在这个函数中我们可以检测用户的编辑内容是否保存,如果尚未保存。
如果内容尚未保存,我们就弹出一个提示框,当用户选择取消的时候,就将vuex中的introduceState值更新为true。
</script> import { mapGetters, mapActions, mapMutations } from "vuex" export default { data() { return { contentHasSave: false // 记录用户是否已经保存内容 } }, methods: { ...mapMutations({ changeIntroduceState: changeIntroduceState }) }, beforeDestory: function(){ if(!contentHasSave){ // 使用element的提示框 this.$confirm('您还未保存简介,确定需要提出吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { // 选择确定,正常跳转 }) .catch(() => { // 选择取消 this.changeIntroduceState(true) }) } } } </script>
最后在router的beforeEach的导航守卫里监测from为当前页面的所有路由跳转。当state的introduceState为true的时候使用next(false)来取消本次路由跳转
import Vue from "vue"; import VueRouter from "vue-router"; import routeConfig from "./routes"; import {sync} from "vuex-router-sync"; import store from "../store"; //加载路由中间件 Vue.use(VueRouter) //定义路由 const router = new VueRouter({ routes: routeConfig, //mode: 'history' }) sync(store, router) router.beforeEach((to, from, next) => { // 简介也未提交,取消跳转 if(from.fullPath === '/adwords/introduce' && store.state.introduceState === 'not-save'){ next(false) } }) export default router
这种做法其实是行不通的,因为beforeEach方法的执行其实是在组件beforeDestory的方法之前执行的,也就是说beforeEach执行的时候introduceState的值根本没有被更新为true。
正确的做法
后来自己去翻vue router的官方文档,找到了一个绝妙的方法,那就是组件内的导航守卫。
const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `this` // 因为当守卫执行前,组件实例还没被创建 }, beforeRouteUpdate (to, from, next) { // 在当前路由改变,但是该组件被复用时调用 // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 // 可以访问组件实例 `this` }, beforeRouteLeave (to, from, next) { // 导航离开该组件的对应路由时调用 // 可以访问组件实例 `this` } }
上面的描述很清楚,于是我就在组件的js代码里加了一个beforeRouteLeave方法,然后弹出提示框,实现提示保存后退出的功能。
</script> export default { data() { return { contentHasSave: false // 记录用户是否已经保存内容 } }, // 组件内导航钩子,处理未保存退出的情况 beforeRouteLeave: function(to, from , next){ if(this.buttonText === '提交'){ next(false) this.$confirm('您还未保存简介,确定需要提出吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { // 选择确定 next() }) } } } </script>
实现效果如下:
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
以上是vue实现提示保存后退出的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

番茄小说是一款非常热门的小说阅读软件,我们在番茄小说中经常会有新的小说和漫画可以去阅读,每一本小说和漫画都很有意思,很多小伙伴也想着要去写小说来赚取赚取零花钱,在把自己想要写的小说内容编辑成文字,那么我们要怎么样在这里面去写小说呢?小伙伴们都不知道,那就让我们一起到本站本站中花点时间来看写小说的方法介绍吧。分享番茄小说写小说方法教程 1、首先在手机上打开番茄免费小说app,点击个人中心——作家中心 2、跳转到番茄作家助手页面——点击创建新书在小说的结

七彩虹主板在中国国内市场享有较高的知名度和市场占有率,但是有些七彩虹主板的用户还不清楚怎么进入bios进行设置呢?针对这一情况,小编专门为大家带来了两种进入七彩虹主板bios的方法,快来试试吧! 方法一:使用u盘启动快捷键直接进入u盘装系统 七彩虹主板一键启动u盘的快捷键是ESC或F11,首先使用黑鲨装机大师制作一个黑鲨U盘启动盘,然后开启电脑,当看到开机画面的时候,连续按下键盘上的ESC或F11键以后将会进入到一个启动项顺序选择的窗口,将光标移动到显示“USB”的地方,然

而后悔莫及、人们常常会因为一些原因不小心将某些联系人删除、微信作为一款广泛使用的社交软件。帮助用户解决这一问题,本文将介绍如何通过简单的方法找回被删除的联系人。1.了解微信联系人删除机制这为我们找回被删除的联系人提供了可能性、微信中的联系人删除机制是将其从通讯录中移除,但并未完全删除。2.使用微信内置“通讯录恢复”功能微信提供了“通讯录恢复”节省时间和精力,用户可以通过该功能快速找回之前被删除的联系人,功能。3.进入微信设置页面点击右下角,打开微信应用“我”再点击右上角设置图标、进入设置页面,,

小红书拥有丰富的内容,让大家可以在这里自由的查看,让你们每天都可以使用这个软件解闷,为自己带来帮助,在使用这个软件的过程中,有时候会看到各种的美图,很多人想要保存起来,但是保存后的图片,都有水印,非常的影响,大家都想要知道在这里该怎么保存没有水印的图片,小编为你们提供方法,有需要的小伙伴们,都可以马上的了解使用起来! 1.点击图片右上角的“…”复制链接 2.打开微信小程序 3.微信小程序搜索红薯库 4.进入红薯库确定获取链接 5.获取图片保存至手机相册

用户使用wallpaperengine可以获得各种壁纸,有很多用户不知道为什么wallpaperengine退出后壁纸没了,动态壁纸必须在你所安装壁纸的软件开启的情况下才会运行在桌面上。为什么wallpaperengine退出后壁纸没了1、动态壁纸必须在你所安装壁纸的软件开启的情况下才会运行在桌面上。2、wallpaperengine是覆盖原来的壁纸,退出当然就没了。3、关了之后壁纸还在除非文件格式是图片类型的,可以通过一些手段获取,不过这样不是动态的。4、Windows里没有用视频或动态图当壁

Win11管理员权限获取方法汇总在Windows11操作系统中,管理员权限是非常重要的权限之一,可以让用户对系统进行各种操作。有时候,我们可能需要获取管理员权限来完成一些操作,比如安装软件、修改系统设置等。下面就为大家总结了一些获取Win11管理员权限的方法,希望能帮助到大家。1.使用快捷键在Windows11系统中,可以通过快捷键的方式快速打开命令提

手机游戏成为了人们生活中不可或缺的一部分,随着科技的发展。它以其可爱的龙蛋形象和有趣的孵化过程吸引了众多玩家的关注,而其中一款备受瞩目的游戏就是手机版龙蛋。帮助玩家们在游戏中更好地培养和成长自己的小龙,本文将向大家介绍手机版龙蛋的孵化方法。1.选择合适的龙蛋种类玩家需要仔细选择自己喜欢并且适合自己的龙蛋种类,根据游戏中提供的不同种类的龙蛋属性和能力。2.提升孵化机的等级玩家需要通过完成任务和收集道具来提升孵化机的等级,孵化机的等级决定了孵化速度和孵化成功率。3.收集孵化所需的资源玩家需要在游戏中

在当今社会,手机已经成为我们生活中不可或缺的一部分。而微信作为我们日常沟通、工作、生活的重要工具,更是经常被使用。然而,在处理不同事务时可能需要分开两个微信账号,这就要求手机能够支持同时登录两个微信账号。华为手机作为国内知名品牌,很多人使用,那么华为手机开启两个微信账号的方法是怎样的呢?下面就来揭秘一下这个方法。首先,要在华为手机上同时使用两个微信账号,最简
