基于vue的移动端如何监听系统返回

2023-10-12 19:44
文章标签 vue 返回 移动 监听系统

本文主要是介绍基于vue的移动端如何监听系统返回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题场景

移动端项目基于vue框架搭建的微服务子应用,每个小功能都是独立存在;当我们退出某个功能页面,返回主页时使用的是手机系统自带的返回功能;未使用程序界面左上角返回按钮,这时候返回逻辑中的清除缓存操作没有执行,导致后台逻辑出现问题。

二、排查思路

2.1 问题原因

返回逻辑只有在界面左上角返回按钮点击时触发,这个时候如果使用手机系统自带返回按钮时无法执行退出逻辑;

2.2 尝试监听返回事件

首先尝试vue自带生命周期是否能够监听手机自带返回操作;

2.2.1 在销毁前/后 生命周期监听

在销毁前/后 (beforeDestroy / destroyed)两个生命周期都进行监听:

beforeDestroy() {alert("界面退出!");
},
destroyed() {alert("界面退出!");
},

退出功能时发现并没触发退出弹框;

2.2.2 在路由vue-router生命周期监听

当离开当前功能时界面路由会发生变化,想到使用组件路由生命周期(beforeRouteUpdate/beforeRouteLeave)进行监听:

// 路由地址发生改变时调用
beforeRouteUpdate(to, from, next) {alert("界面退出!");next();
},
// 离开当前路由时调用
beforeRouteLeave(to, from, next) {alert("界面退出!");next();}

退出功能时发现并没触发退出弹框;

2.3 引发思考

vue提供的生命周期监听函数无法监听到手机系统返回按键;思考有没有其他方案可以监听到返回事件?

通过查询资料搜索发现可以通过window.history与浏览器监听事件popstate来实现监听。vue是基于原生js封装的框架,页面跳转原理上还是基于浏览器的路由的二次封装;因此当vue生命周期无法实现我们需求时,这个时候就要基于原生来想办法实现需求。

三、解决方案

3.1 核心思路

利用window.history与浏览器刷新popstate状态监听事件实现。

每当界面路由前进或是后退都会存储到history历史记录中,记录当前界面的路由链接;这个时候我们可以监听回退事件来做业务需求逻辑。

3.2 具体步骤

  1. 在挂载完成阶段后监听popstate事件;
  2. 页面销毁时,取消监听,防止其他界面影响;
  3. 定义退出的业务逻辑,当触发popstate事件时调用;

3.3 实现代码

mounted() {if (window.history && window.history.pushState) {// 添加当前界面记录history.pushState(null, null, document.URL);// 监听页面刷新window.addEventListener("popstate", this.handleGoBack, false); }
},
destroyed() {window.removeEventListener("popstate", this.handleGoBack, false); 
},
methods:{handleGoBack(){alert("界面退出!");}
}

这篇关于基于vue的移动端如何监听系统返回的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/198024

相关文章

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

C# WebAPI的几种返回类型方式

《C#WebAPI的几种返回类型方式》本文主要介绍了C#WebAPI的几种返回类型方式,包括直接返回指定类型、返回IActionResult实例和返回ActionResult,文中通过示例代码介绍的... 目录创建 Controller 和 Model 类在 Action 中返回 指定类型在 Action

使用Python实现在PDF中添加、导入、复制、移动与删除页面

《使用Python实现在PDF中添加、导入、复制、移动与删除页面》在日常办公和自动化任务中,我们经常需要对PDF文件进行页面级的编辑,使用Python,你可以轻松实现这些操作,而无需依赖AdobeAc... 目录1. 向 PDF 添加空白页2. 从另一个 PDF 导入页面3. 删除 PDF 中的页面4. 在

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单