微信小程序中页面跳转主要有两种方式:声明式导航(通过组件实现)和编程式导航(通过API实现)。两种方式适用于不同场景,以下详细说明。

一、声明式导航(navigator组件)

通过小程序内置的<navigator>组件实现跳转,无需编写JavaScript代码,直接在WXML中配置属性即可。核心属性为url(目标页面路径)和open-type(跳转方式)。

1. 基本用法(默认跳转:保留当前页面)

默认情况下,open-typenavigateTo,跳转后当前页面会保留在页面栈中,目标页面可通过返回按钮回到当前页面。

<!-- 从当前页面跳转到 pages/detail/detail 页面 -->
<navigator url="/pages/detail/detail">跳转到详情页</navigator>

注意:url必须以/开头,表示项目根目录下的路径。

2. 重定向跳转(关闭当前页面)

设置open-type="redirect",跳转时会关闭当前页面,当前页面不会保留在页面栈中,目标页面无法通过返回按钮回到当前页面。

<navigator url="/pages/detail/detail" open-type="redirect">重定向到详情页(关闭当前页)
</navigator>

3. 跳转到tabBar页面

若目标页面是app.json中配置的tabBar页面(底部导航页),需设置open-type="switchTab",跳转时会关闭所有非tabBar页面。

<!-- 假设 pages/index/index 是tabBar页面 -->
<navigator url="/pages/index/index" open-type="switchTab">跳转到首页(tabBar页面)
</navigator>

4. 返回上一页(或多级页面)

设置open-type="navigateBack",配合delta属性指定返回的层数(默认1层)。

<!-- 返回上一页 -->
<navigator open-type="navigateBack">返回</navigator><!-- 返回上两层 -->
<navigator open-type="navigateBack" delta="2">返回上两层</navigator>

5. 传递参数

通过URL查询字符串(?key=value&key2=value2)传递参数,目标页面在onLoad生命周期中通过options参数获取。

<!-- 当前页面传递参数 id=1 和 name=test -->
<navigator url="/pages/detail/detail?id=1&name=test">带参数跳转到详情页
</navigator><!-- 目标页面(detail.js)获取参数 -->
Page({onLoad(options) {console.log(options.id); // 输出 1console.log(options.name); // 输出 test}
})

二、编程式导航(API调用)

通过调用微信小程序提供的导航API实现跳转,需在JavaScript中编写代码,适用于需要先执行逻辑(如验证登录状态)再跳转的场景。

1. wx.navigateTo(保留当前页面)

与声明式导航的open-type="navigateTo"功能一致,跳转后保留当前页面。

// 在当前页面的.js文件中
Page({goToDetail() {wx.navigateTo({url: '/pages/detail/detail' // 目标页面路径});}
})

在WXML中绑定事件触发:<button bind:tap="goToDetail">跳转到详情页</button>

2. wx.redirectTo(关闭当前页面)

与声明式导航的open-type="redirect"功能一致,跳转时关闭当前页面。

Page({goToDetail() {wx.redirectTo({url: '/pages/detail/detail'});}
})

3. wx.switchTab(跳转到tabBar页面)

与声明式导航的open-type="switchTab"功能一致,用于跳转tabBar页面。

Page({goToHome() {wx.switchTab({url: '/pages/index/index' // 目标tabBar页面路径});}
})

4. wx.navigateBack(返回上一页)

与声明式导航的open-type="navigateBack"功能一致,通过delta指定返回层数。

Page({goBack() {wx.navigateBack({delta: 1 // 返回上一页(默认1)});}
})

5. 传递参数(与声明式一致)

url中通过查询字符串传递参数,目标页面在onLoad中获取。

Page({goToDetail() {wx.navigateTo({url: '/pages/detail/detail?id=1&name=test'});}
})// 目标页面(detail.js)
Page({onLoad(options) {console.log(options.id); // 1console.log(options.name); // test}
})

三、页面栈与跳转限制

小程序的页面栈是一个数组,最多可容纳10个页面。使用wx.navigateTo或默认声明式导航时,新页面会加入栈中;使用wx.redirectTo时,当前页面会被移除栈,新页面加入;使用wx.switchTab时,所有非tabBar页面会被移除栈。

当页面栈已满(10层),继续使用wx.navigateTo会失败,需改用wx.redirectTo

四、两种方式的选择建议

若只需单纯跳转,无需前置逻辑,优先使用声明式导航(代码更简洁)。

若需要先执行逻辑(如验证、数据处理)再跳转,使用编程式导航

跳转tabBar页面必须使用switchTab(无论声明式还是编程式)。

需要返回多级页面时,编程式导航的wx.navigateBack更灵活(可动态计算delta)。

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

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

相关文章

从0开始学linux韦东山教程Linux驱动入门实验班(7)

本人从0开始学习linux&#xff0c;使用的是韦东山的教程&#xff0c;在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。本人将前几章的内容大致学完之后&#xff0c;考虑到后续驱动方面得更多的开始实操&#xff0c;后续的内容将以韦东山教程Linux驱动入门实…

国内AI IDE竞逐:腾讯CodeBuddy、阿里通义灵码、字节跳动TRAE、百度文心快码

国内AI IDE竞逐&#xff1a;腾讯CodeBuddy、阿里通义灵码、字节跳动TRAE、百度文心快码 随着人工智能技术的不断发展&#xff0c;各大科技公司纷纷推出自家的AI IDE&#xff0c;推动软件开发进入全新的智能化时代。腾讯的 CodeBuddy IDE、阿里云的 通义灵码 AI IDE、字节跳动的…

git rebase使用教程 以及和merge的区别

Merge和Rebase概念概述 rebase 和 merge 相似&#xff0c;但又不完全相同&#xff0c;本质上都是用来合并分支的命令&#xff0c;区别如下 merge合并分支会多出一条merge commit记录&#xff0c;而rebase不会merge的提交树是非线性的&#xff0c;会有分叉&#xff0c;而rebase的…

React中的合成事件解释和理解

什么是合成事件&#xff08;Synthetic event&#xff09;?它和原生事件有什么区别?解题思路:解释合成事件&#xff0c;然后对比原生事件&#xff0c;然后再说他的优势1.一致性 在 react里面&#xff0c;这个合成事件是非常重要的&#xff0c;因为它就是为了解决浏览器之间与事…

【Python系列】使用 memory_profiler 诊断 Flask 应用内存问题

博客目录一、内存分析的重要性二、memory_profiler 基础使用安装与基本配置理解分析报告三、在 Flask 应用中使用 memory_profiler装饰视图函数使用 mprof 进行长期监控四、高级内存分析技巧精确测量代码块内存定期内存采样结合 objgraph 分析对象引用五、常见内存问题及解决方…

vue3【组件封装】超级表单 S-form.vue

最终效果 代码实现 components/SUI/S-form.vue <script lang"ts" setup> import type { FormInstance } from "element-plus";// 使用索引签名定义对象类型 type GenericObject {[key: string]: any; };const props defineProps<{Model?: Gen…

Android Studio Memory Monitor内存分析核心指标详解

Depth、Native Size、Shallow Size、Retained Size 解析 一、指标定义与对比指标定义计算逻辑重要性Shallow Size对象自身实例占用的内存基本类型字段大小 引用指针 内存对齐对象的基础内存成本Retained Size回收该对象可释放的总内存量&#xff08;含所有依赖对象&#xff0…

vue中使用wavesurfer.js绘制波形图和频谱图(支持.pcm)

新的实现方式&#xff1a;vue使用Canvas绘制频谱图 安装wavesurfer.js npm install wavesurfer.js第一版&#xff1a; 组件特点&#xff1a; 一次性加载好所有的数据&#xff1b; <template><div class"audio-visualizer-container"><div class&…

go mod教程、go module

什么是go mod go mod 是go语言的包管理工具&#xff0c;类似java 的maven&#xff0c;go mod的出现可以告别goPath&#xff0c;使用go module来管理项目&#xff0c;有了go mod账号就不需要非得把项目放到gopath/src目录下了&#xff0c;你可以在磁盘的任何位置新建一个项目 go…

150-SWT-MCNN-BiGRU-Attention分类预测模型等!

150-SWT-MCNN-BiGRU-Attention分类预测模型!基于多尺度卷积神经网络(MCNN)双向长短期记忆网络(BiGRU)注意力机制(Attention)的分类预测模型&#xff0c;matlab代码&#xff0c;直接运行使用&#xff01;1、模型介绍&#xff1a;针对传统方法在噪声环境下诊断精度低的问题&#…

MySQL数据一致性与主从延迟深度解析:从内核机制到生产实践

在高并发分布式系统中&#xff0c;数据一致性与复制延迟如同硬币的两面。本文深入剖析MySQL持久化机制与主从同步原理&#xff0c;并提供可落地的调优方案。一、数据持久化核心机制&#xff1a;双日志协同 1. Redo Log&#xff1a;崩溃恢复的生命线刷新策略&#xff08;innodb_…

【I】题目解析

目录 单选题 多选题 判断题 单选题 1.reg[7:0]A; A2hFF;则A&#xff08;&#xff09; A.8b11111110 B.8b03 C.8b00000011 D.8b11111111 C 2hFF实际上等效于2位二进制2b11&#xff0c;赋值给8位寄存器A之后&#xff0c;低位赋值&#xff0c;高位补0 A8b00000011 AMD FPG…

《Foundation 面板:设计、功能与最佳实践解析》

《Foundation 面板:设计、功能与最佳实践解析》 引言 在当今数字化时代,用户界面(UI)设计的重要性不言而喻。其中,Foundation 面板作为一种流行的前端框架,因其灵活性和高效性而被众多开发者所青睐。本文将深入解析 Foundation 面板的设计理念、功能特点以及最佳实践,…

React服务端渲染 Next 使用详解

1. Next.js 概述 Next.js 是一个基于 React 的开源框架&#xff0c;专注于服务器端渲染&#xff08;SSR&#xff09;和静态站点生成&#xff08;SSG&#xff09;&#xff0c;提供开箱即用的 SSR 功能&#xff0c;简化 React 应用的开发与部署。 2. Next.js 的核心特性 SSR 支…

Deforum Stable Diffusion,轻松实现AI视频生成自由!

摘要&#xff1a; 你是否曾被那些充满想象力、画面流畅的AI视频所震撼&#xff1f;你是否也想亲手创造出属于自己的AI动画&#xff1f;本文将为你提供一份“保姆级”的详尽教程&#xff0c;从环境配置到参数调整&#xff0c;一步步带你复现强大的Deforum Stable Diffusion模型&…

不同环境安装配置redis

不同环境安装配置redis windows 环境安装redis redis所有下载地址 windows版本redis下载&#xff08;GitHub&#xff09;&#xff1a; https://github.com/tporadowski/redis/releases &#xff08;推荐使用&#xff09;https://github.com/MicrosoftArchive/redis/releases]官…

汇川Easy系列PLC算法系列(回溯法ST语言实现)

Easy系列PLC 3次多项式轨迹插补算法 Easy系列PLC 3次多项式轨迹插补算法(完整ST代码)_plc连续插补算法-CSDN博客文章浏览阅读122次。INbExecuteBOOLOFFOFF不保持1INrStartPosREAL0.0000000.000000不保持起始位置unit2INrEndPosREAL0.0000000.000000不保持结束位置unit3INrStar…

Linux C:构造数据类型

目录 一、结构体&#xff08;struct&#xff09; 1.1类型定义 1.2 结构体变量定义 1.3 结构体元素初始化 1.4 结构体成员访问 1.5 结构体的存储&#xff08;内存对齐&#xff09; 1.6 结构体传参 本文主要记录了C语言中构造数据类型部分的内容&#xff0c;今天暂时只写了…

Python:self

在Python面向对象编程中&#xff0c;self是一个指向类实例自身的引用参数&#xff1a;‌1. 本质与作用‌‌身份标识‌&#xff1a;self是类实例化后对象的"身份证"&#xff0c;代表当前实例本身&#xff0c;用于区分不同实例的属性和方法‌‌自动传递‌&#xff1a;调…

【SpringMVC】SpringMVC的概念、创建及相关配置

什么是SpringMVC 概述 中文翻译版&#xff1a;Servlet 栈的 Web 应用 Spring MVC是Spring Framework的一部分&#xff0c;是基于Java实现MVC的轻量级Web框架。 查看官方文档&#xff1a;https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.h…