uniapp 页面栈一定深度后,回首页导航到新页面的解决方案

uniapp 页面栈一定深度后,回首页导航到新页面的解决方案

uniapp 页面导航解决方案

在 uniapp 中,要实现先弹出页面栈回到首页,然后再跳转到指定页面。


/*** @description 后台选择链接专用跳转*/
interface Link {path: string;name?: string;type: string;isTab: boolean;query?: Record<string, any>;
}export enum LinkTypeEnum {"SHOP_PAGES" = "shop","CUSTOM_LINK" = "custom",
}export function navigateTo(link: Link,navigateType: "navigateTo" | "reLaunch" | "switchTab" = "navigateTo"
) {const url = link.query? `${link.path}?${objectToQuery(link.query)}`: link.path;navigateType == "navigateTo" && uni.navigateTo({ url });navigateType == "reLaunch" && uni.reLaunch({ url });
}/*** @description 重新定向页面路由* @param {string} baseUrl 首页基准路由URL* @param {string} navigateToUrl 基准路由->跳转的页面URL(可以为空,这样就是定向到首页)* @param {Function} uToastRefShow 弹窗提示* @param {string} uToastMsg 弹窗提示信息* */
export const goRedirectRouteMethod = async (baseUrl: string,navigateToUrl: string, uToastRefShowFun: Function, uToastMsg: string = "跳转成功" ) => {console.log("goRedirectRouteMethod:baseUrl=", baseUrl,);console.log("goRedirectRouteMethod:navigateToUrl=", navigateToUrl);/*** @description  默认 navigateBack*/if (baseUrl == undefined || baseUrl == null || baseUrl == '') {uni.navigateBack({});}let pages = getCurrentPages();if (pages.length == 0) {return;}console.log("getCurrentPages", pages);if (baseUrl.startsWith("/")) {baseUrl = baseUrl.substring(1, baseUrl.length);}console.log("====baseUrl====", baseUrl);let lngth: number = pages.length;// 返回的页面数let deltatmp: number = 1;for (let index = 0; index < lngth; index++) {let route = pages[index].route;if (route == baseUrl) {deltatmp = lngth - index - 1;break;}}if (!(uToastRefShowFun == null || uToastRefShowFun == undefined)) {uToastRefShowFun(uToastMsg, "success", 2000);}await setTimeout(() => {// 4. 返回A页面uni.navigateBack({delta: deltatmp,success: () => {/** === **/setTimeout(() => {if (navigateToUrl?.length > 0) {if (!navigateToUrl.startsWith("/")) {navigateToUrl = "/" + navigateToUrl;}// 5. 跳转到B页面 有BUG 首页会闪一下navigateTo({path: navigateToUrl,type: '',isTab: false,query: {}})}}, 300)/** === **/},});}, 2000);
}

解决方案说明

上述代码提供了一个完整的导航工具类,主要功能包括:

  1. 获取页面栈长度:通过 getCurrentPages() API 获取当前页面栈的深度
  2. 智能导航逻辑
    • 先判断当前是否已经在首页
    • 如果不在首页,根据首页在栈中的位置选择合适的方式返回首页
    • 返回首页后,再跳转到目标页面
  3. 参数传递支持:支持向目标页面传递参数
  4. 错误处理:当导航失败时提供备选方案

使用方法

你可以在任何页面中引入这个导航工具,然后调用 backToHomeAndNavigate 方法,传入目标页面路径和可选的参数对象。

 goRedirectRouteMethod("/package/index/index","/package/healthSign/index",uToastRefShow,  // 弹窗提示信息函数"转到【首页】-->【健康签约】页面"
);

注意事项

  1. 请根据你的项目结构调整首页路径 baseUrl
  2. 页面路径需要使用绝对路径,以 / 开头
  3. 代码中使用了 setTimeout 来确保页面跳转的顺序性,你可以根据实际情况调整延迟时间或使用 Promise 链式调用

这个解决方案适用于大多数 uniapp 项目,并且提供了健壮的错误处理机制,确保导航操作能够顺利完成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java实现Google邮箱SMTP协议

一、开通Google的SMTP协议 在谷歌邮箱中开启IMAP访问 到google的设置中开启两步验证功能 在到 创建和管理应用专用密码 二、java中实现 引入maven <!--邮件--><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artif…

【2025最新】Adobe Illustrator下载保姆级安装教程(附官方下载链接)

文章目录 Adobe Illustrator 2024新功能介绍如何提高Adobe Illustrator的运行效率 Adobe Illustrator 这款神器相信不用我多介绍了吧&#xff0c;设计师们的得力助手&#xff01;最新的2025版据说功能和体验都提升了不少。这篇呢&#xff0c;算是我个人整理的一个超详细adobe i…

2025.06.11【Ribo-seq】|根据注释文件获取外显子及ORF序列

文章目录 一、准备材料二、提取外显子区间为BED文件1. 提取GTF中exon为BED 三、用bedtools提取外显子fasta四、后续拼接外显子为ORF序列五、流程总结 一、准备材料 基因组fasta&#xff08;如&#xff1a;genome.fa&#xff09;RiboCode生成的GTF文件&#xff08;如&#xff1…

python第48天打卡

知识点回顾&#xff1a; 随机张量的生成&#xff1a;torch.randn函数卷积和池化的计算公式&#xff08;可以不掌握&#xff0c;会自动计算的&#xff09;pytorch的广播机制&#xff1a;加法和乘法的广播机制 ps&#xff1a;numpy运算也有类似的广播机制&#xff0c;基本一致 作…

Day50 Python打卡训练营

知识点回顾&#xff1a; 1. resnet结构解析 2. CBAM放置位置的思考 3. 针对预训练模型的训练策略 a. 差异化学习率 b. 三阶段微调 现在我们思考下&#xff0c;是否可以对于预训练模型增加模块来优化其效果&#xff0c;这里我们会遇到一个问题 预训练模型的结构和权重是固定…

leetcode:42. 接雨水(秒变简单题)

题目要求 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 要求给出一列柱子&#xff0c;求该柱子能盛放多少雨水 解题思路&#xff1a; 这些柱子围城了一个“盆地”&#xff0c;雨水会积攒在低洼处&…

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…

245. 2019年蓝桥杯国赛 - 数正方形(困难)- 递推

245. 数正方形&#xff08;困难&#xff09; 2019年蓝桥杯国赛 - 数正方形&#xff08;困难&#xff09; 标签&#xff1a;2019 国赛 递推 题目描述 在一个 N N N N N N 的点阵上&#xff0c;取其中 4 个点恰好组成一个正方形的 4 个顶点&#xff0c;一共有多少种不同的取…

python Day46 学习(日志Day15复习)

Q. 关于"range()" 手写笔记复习 今日学习到这里&#xff0c;明日继续加油&#xff01;&#xff01;&#xff01;浙大疏锦行

深度解析 Linux 内核参数 net.ipv4.tcp_rmem:优化网络性能的关键

文章目录 引言一、认识 net.ipv4.tcp_rmem1. 最小值&#xff08;min&#xff09;2. 默认值&#xff08;default&#xff09;3. 最大值&#xff08;max&#xff09; 二、net.ipv4.tcp_rmem 的工作原理三、net.ipv4.tcp_rmem 的实际应用场景1. 高并发 Web 服务器2. 文件传输服务3…

商品中心—1.B端建品和C端缓存的技术文档一

大纲 1.商品中心的专业术语 2.商品中心的基本业务系统 3.商品中心整体架构设计以及运行流程 4.商品B端—商品编码生成逻辑 5.商品B端—商品核心数据模型 6.商品B端—转换建品请求数据为商品模型数据 7.商品B端—商品建品时商品编号补全与审核配置 8.商品B端—商品审核前…

Xcode 16.2 版本 pod init 报错

Xcode 版本升级到 16.2 后&#xff0c;项目执行 pod init 报错&#xff1b; ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchron…