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

简单网页制作模板下载长沙网站搭建优化

简单网页制作模板下载,长沙网站搭建优化,苏州十大广告公司,wordpress建站详细教程Uniapp 中根据不同离开页面方式处理 onHide 的方法 在 Uniapp 开发中,onHide 生命周期会在页面隐藏时触发,但默认无法直接区分用户是通过何种方式离开页面的。不过我们可以通过组合其他钩子函数和路由事件来实现对不同离开方式的识别和处理。 一、常见…

Uniapp 中根据不同离开页面方式处理 onHide 的方法

在 Uniapp 开发中,onHide 生命周期会在页面隐藏时触发,但默认无法直接区分用户是通过何种方式离开页面的。不过我们可以通过组合其他钩子函数和路由事件来实现对不同离开方式的识别和处理。

一、常见的页面离开方式

  1. 路由跳转

    • 使用 uni.navigateTo 跳转到非 tab 页面
    • 使用 uni.switchTab 跳转到 tab 页面
    • 使用 uni.redirectTo 重定向到其他页面
    • 使用 uni.reLaunch 关闭所有页面并跳转
  2. 返回操作

    • 点击手机物理返回键
    • 点击页面中的返回按钮(如 uni.navigateBack
    • 小程序左上角的导航栏返回按钮
  3. 其他场景

    • 小程序被切入后台(onHide 会触发)
    • 页面被组件覆盖(如弹窗、模态框)

二、区分离开方式的实现方法

1. 通过路由参数标记跳转方式
export default {data() {return {leaveType: '' // 记录离开方式}},onLoad(options) {// 从参数中获取离开方式标记if (options.leaveType) {this.leaveType = options.leaveType;}},onHide() {this.handleLeavePage();},methods: {// 处理不同离开方式handleLeavePage() {switch (this.leaveType) {case 'navigateTo':console.log('通过 navigateTo 离开');// 保存临时数据break;case 'switchTab':console.log('切换到 Tab 页面');// 暂停定时器break;case 'navigateBack':console.log('返回上一页');// 提交未保存数据break;default:console.log('未知方式离开');}},// 页面内按钮跳转示例goToNextPage() {uni.navigateTo({url: '/pages/next-page',// 携带离开方式标记events: {// 可接收目标页面返回的数据},success: (res) => {// 跳转成功后执行}});}}
}
2. 使用全局状态管理(Vuex/Pinia)记录操作
// store/index.js (使用 Pinia)
import { defineStore } from 'pinia'export const useAppStore = defineStore('app', {state: () => ({lastLeaveType: ''}),actions: {setLeaveType(type) {this.lastLeaveType = type;}}
})// 页面中使用
<template><view><button @click="goBack">返回上一页</button><button @click="goToTab">切换到 Tab 页</button></view>
</template><script>
import { useAppStore } from '@/store'export default {setup() {const appStore = useAppStore();const goBack = () => {appStore.setLeaveType('navigateBack');uni.navigateBack();}const goToTab = () => {appStore.setLeaveType('switchTab');uni.switchTab({ url: '/pages/tab/index' });}return {goBack,goToTab}},onHide() {const leaveType = appStore.lastLeaveType;if (leaveType === 'navigateBack') {// 处理返回操作} else if (leaveType === 'switchTab') {// 处理切换 Tab 操作}}
}
</script>
3. 监听物理返回键和导航栏返回事件
export default {data() {return {isBackAction: false,isTabSwitch: false}},onLoad() {// 监听物理返回键uni.onBackPress(() => {this.isBackAction = true;// 这里可以控制是否允许返回return false; // 阻止默认返回行为});// 监听页面切换到 Tab 的事件(需要配合全局监听)// 可在 App.vue 中监听 tab 切换},onShow() {// 每次显示时重置标记this.isBackAction = false;this.isTabSwitch = false;},onHide() {if (this.isBackAction) {console.log('用户点击了返回按钮');this.saveBeforeBack();} else if (this.isTabSwitch) {console.log('切换到了 Tab 页面');this.pauseProcess();} else {console.log('其他方式离开页面');}},methods: {// 跳转到非 Tab 页面goToOtherPage() {uni.navigateTo({ url: '/pages/other' });},// 切换到 Tab 页面(需在 App.vue 中标记)switchToTab() {getApp().globalData.isTabSwitch = true;uni.switchTab({ url: '/pages/tab/index' });}}
}
4. 在 App.vue 中全局监听路由事件
// App.vue
export default {onLaunch() {console.log('App Launch');this.globalData = {lastRouteAction: '' // 记录最后一次路由操作}// 监听路由变化uni.onAppRoute((obj) => {const { path, query } = obj;// 判断路由操作类型if (path.startsWith('/pages/tab/')) {this.globalData.lastRouteAction = 'switchTab';} else if (query._navigateBack) {this.globalData.lastRouteAction = 'navigateBack';} else {this.globalData.lastRouteAction = 'navigateTo';}});},onShow() {console.log('App Show');},onHide() {console.log('App Hide');}
}// 页面中使用
export default {onHide() {const lastAction = getApp().globalData.lastRouteAction;switch (lastAction) {case 'switchTab':// 处理 Tab 切换break;case 'navigateBack':// 处理返回break;case 'navigateTo':// 处理普通跳转break;}}
}

三、不同场景的处理建议

离开方式检测方法典型处理场景
普通跳转(navigateTo)通过路由参数或全局状态标记保存临时表单数据、暂停非紧急任务
返回(navigateBack)监听物理返回键或路由参数提交未保存内容、提示用户确认离开
切换 Tab(switchTab)全局监听或在跳转时标记暂停实时数据更新、保存页面滚动位置
小程序切后台结合 onHide 和 onAppHide 事件暂停音频播放、保存当前操作进度
重定向(redirectTo)通过路由参数或全局状态标记清除临时缓存、释放资源

四、最佳实践

  1. 组合使用多种检测方法:根据项目复杂度选择合适的检测方式,复杂场景可结合全局状态和路由参数

  2. 避免过度标记:只对关键操作进行标记,避免增加过多代码复杂度

  3. 重置状态:在 onShow 中重置标记状态,确保每次页面显示时状态干净

  4. 性能考虑:避免在 onHide 中执行耗时操作,优先使用异步处理或标记待处理任务

export default {onHide() {// 标记需要处理的任务,而非直接执行this.pendingTasks = {saveData: true,pauseTimer: true};},onUnload() {// 页面卸载时执行最终处理if (this.pendingTasks.saveData) {this.saveAllData();}}
}

通过以上方法,你可以在 onHide 中区分不同的离开方式,并执行针对性的处理逻辑,提升用户体验和应用稳定性。

http://www.cadmedia.cn/news/9757.html

相关文章:

  • 青岛建设英文网站建设seo外链
  • erp登录入口谷歌seo网站排名优化
  • 房地产开发建设网站新冠疫情最新消息今天公布
  • 大兴网站开发网站建设价格南京百度推广优化排名
  • 吉林电商的网络推广优化关键词具体要怎么做
  • 深圳专业网站设计专业定制免费平台
  • 微信营销案例pptseo是啥
  • 门户资源分享网站模板西安百度推广优化
  • 网站开发培训中心关键词优化靠谱推荐
  • 莱州网站建设公司百度收录批量查询
  • 中国制造网注册网站免费注册百度云怎么找资源
  • 网络营销网站建设论文产品网络营销策划方案
  • 专门做美食的网站6怎么推广自己的公司
  • python自学seo优化专家
  • 无锡百度信息流谷歌优化seo
  • 建站公司接单网址域名注册信息查询
  • 邢台企业做网站多少钱南宁关键词优化公司
  • 政府网站建设管理方面工作总结怎么自己制作网页
  • 家具建设网站19
  • 企业品牌策划方案seo交流论坛
  • 苏州建设网站平台做seo推广一年大概的费用
  • 深圳网站开发奇辰科技软文营销策划
  • 翻译做网站医疗网站优化公司
  • 网站基本要素竞价交易
  • 微网站建设及微信推广方案ppt模板搜索引擎优化的分类
  • 中国建设银行互联网网站怎样制作免费网页
  • 做废品交易看什么什么网站百度推广的费用
  • 涪陵网站建设公司普通话手抄报简单又漂亮
  • 外贸电子商务网站建设平台seo专业培训班
  • 网站建设维护内容seo网站优化课程