小程序组件 —— 26 组件案例 - 跳转到商品列表
在上一节实现了商品导航区域,这一节实现跳转到商品列表的功能;当用户在点击商品导航时,需要能够跳转到商品列表页面;在微信小程序中,如果需要进行跳转,需要使用 navigator
组件,navigator
组件有两个常用的属性:
- url:当前小程序内的跳转链接,也就是点击之后需要跳转到的页面路径;
open-type
:跳转方式navigate
:保留当前页面,跳转到应用内的某个页面,但是不能跳到 tabbar 页面;redirect
:关闭当前页面,跳转到应用内的某个页面,但是不能跳到 tabbar 页面;switchTab
:跳转到 tabbar 页面,并关闭其它所有非 tabbar 页面;reLaunch
:关闭所有页面,打开到应用内的某个页面;navigateBack
:关闭当前页面,返回上一页面或多级页面;
使用 navigator
时有两个注意事项:
url
路径后可以带参数。参数和路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔,例如:/list?id=10&name=hua
,list
页面可以在onLoad(options)
生命周期函数中获取传递的参数;open-type="switchTab"
时不支持传参;
下面在开发者工具中演示一下具体用法:
在 index.wxml 中添加 navigator 组件,如下:
<navigator url="/pages/list/list">到商品列表页面</navigator>
navigator 组件中的 url 是指小程序内的跳转链接,当点击文本时,进入这个页面对应的路由;在微信小程序中,每个页面的路径都已经存放到根目录的 app.json 文件中的 pages 字段中,如下:
"pages": ["pages/index/index","pages/cate/cate","pages/cart/cart","pages/profile/profile","pages/list/list"]
我们找到 pages
中的 pages/list/list
路由,并粘贴到 navigator
组件的 url
中,注意在复制粘贴过程中,需要在 pages/list/list
前面添加 /
,否则无法正常跳转,填写之后,点击文本,就能实现跳转功能,如下:
下面研究一下 open-type
属性的功能,在 index.wxml
中添加下面的代码:
<navigator url="/pages/list/list" open-type="navigate">到商品列表页面</navigator>
<navigator url="/pages/cate/cate" open-type="navigate">到商品分类页面</navigator>
当我们使用 open-type
属性的 navigate
属性值时,当我们点击第一个文本能够正常跳转,但是点击第二个“跳转到商品分类页面”时,无法正常跳转;这是因为 list
商品列表页面是一个非 tabbar
页面,cate
商品分类页面是一个 tabbar
页面;navigate
属性会导致无法跳转到 tabbar
页面;
redirect
属性同理,只能跳转到非 tabbar
页面,无法跳转 tabbar
页面:
<navigator url="/pages/list/list" open-type="redirect">到商品列表页面</navigator>
<navigator url="/pages/cate/cate" open-type="redirect">到商品分类页面</navigator>
虽然 navigate
和 redirect
都是只能跳转到非 tabbar
页面,但是两者还是有区别的:
navigate
属性:跳转到对应的页面之后,有返回上一页的箭头;
redirect
属性:跳转到对应的页面之后,有返回当前项目首页的一个图标:
redirect
方法的存在有其特定的意义和用途:
- 简化页面栈: 在某些情况下,页面的历史记录并不重要,或者不希望用户返回到之前的页面。使用 redirect
可以避免页面栈中累积过多的页面,简化页面管理;
- 流程控制: 在一些需要强制用户完成某个流程的场景中,使用 redirect
可以确保用户无法返回到之前的步骤。例如,在用户完成某个操作后,强制跳转到结果页面,而不允许返回到操作页面;
- 性能优化: 由于 redirect
会销毁当前页面,可能在某些情况下有助于释放内存,特别是在页面内容较多或复杂时;
下面继续分析一下 open-type 中的 switchTab 属性:
<navigator url="/pages/list/list" open-type="switchTab">到商品列表页面</navigator>
<navigator url="/pages/cate/cate" open-type="switchTab">到商品分类页面</navigator>
可以发现 switchTab
属性只能跳转到 tabbar
页面,无法跳转到 tabbar
页面;
下面继续分析一下 open-type 中的 switchTab 属性:
<navigator url="/pages/list/list" open-type="reLaunch">到商品列表页面</navigator>
<navigator url="/pages/cate/cate" open-type="reLaunch">到商品分类页面</navigator>
在微信小程序中,reLaunch
方法用于关闭所有页面并打开到应用内的某个页面。与其他页面跳转方法(如 navigateTo
、redirectTo
和 switchTab
)相比,reLaunch
有其独特的功能和用途:
-
功能
- 关闭所有页面:
reLaunch
会关闭当前小程序中的所有页面,清空页面栈; - 打开指定页面: 在关闭所有页面后,
reLaunch
会打开指定的页面,使其成为新的首页;
- 关闭所有页面:
-
用途
- 重置应用状态: 在某些情况下,可能需要重置整个应用的状态。例如,用户注销登录后,可能需要返回到登录页面并清除之前的所有页面历史记录。
reLaunch
可以实现这一需求; - 流程结束: 在完成某个流程(如注册、支付等)后,可能需要返回到应用的首页或某个特定页面,并清除流程中的所有页面记录;reLaunch
在这里插入代码片
可以确保用户无法通过返回按钮回到流程中的页面; - 错误处理: 在遇到严重错误或异常情况时,可能需要重置应用并返回到某个特定页面(如错误提示页面或首页)。
reLaunch
可以帮助开发者实现这一需求;
- 重置应用状态: 在某些情况下,可能需要重置整个应用的状态。例如,用户注销登录后,可能需要返回到登录页面并清除之前的所有页面历史记录。
-
注意事项
- 页面路径:
reLaunch
方法的 url 参数必须是应用内的有效页面路径; - 页面栈清空: 使用
reLaunch
后,所有之前的页面都会被关闭,用户无法通过返回按钮回到之前的页面; - 性能影响: 由于
reLaunch
会关闭所有页面并重新打开一个新页面,可能会对应用的性能产生一定影响,特别是在页面内容较多或复杂时;
- 页面路径:
下面继续分析一下 open-type
中的 navigateBack
属性:
在 index.wxml
中添加下面的内容:
<navigator url="/pages/list/list" open-type="navigate">到商品列表页面</navigator>
在 list.wxml
中添加对应代码:
<navigator open-type="navigateBack">返回上一页</navigator>
当从 index
进入到 list
页面时,点击 list
页面的 返回上一页 就能返回到 index
页面(上一页),所以说 navigateBack
的功能是返回上一页或者返回前几页,navigateBack
默认只能返回上一页,如果需要返回前几页,需要添加一个属性 delta
。delta
用于控制返回的层级(指定返回前几页):
<navigator open-type="navigateBack" delta="1">返回上一页</navigator>
如果需要传递参数,需要遵循规范,路径和参数之间需要以问号进行分隔,参数键和值之间需要使用 = 来进行连接,如果有多个参数需要使用 & 连接符进行分隔:
<navigator url="/pages/list/list?id=10&num=hua" open-type="navigate">到商品列表页面</navigator>
可以看到,在跳转的时候,页面参数已经成功带上:
如果想获取 url
中的参数,需要在 list.js
文件中找到 onLoad
生命周期函数,onLoad
函数有一个默认的 options
形参,通过 options
形参就能够接收传递的参数:
onLoad(options) {console.log(options);},
通过上面的讲解我们大致了解了 navigator
组件的用法,下面我们使用 navigator 实现产品需求:当点击商品导航时跳转到对应的商品列表中,修改前面编写的商品导航区代码,如下:
<view class="good-nav"><view><navigator url="/pages/list/list"><image src="../../assets/category/cate-1.png" mode="" /><text>鲜花玫瑰</text></navigator></view><view><navigator url="/pages/list/list"><image src="../../assets/category/cate-1.png" mode="" /><text>鲜花玫瑰</text></navigator></view><view><navigator url="/pages/list/list"><image src="../../assets/category/cate-1.png" mode="" /><text>鲜花玫瑰</text></navigator></view><view><navigator url="/pages/list/list"><image src="../../assets/category/cate-1.png" mode="" /><text>鲜花玫瑰</text></navigator></view><view><image src="../../assets/category/cate-1.png" mode="" /><text>鲜花玫瑰</text></view>
</view>
具体效果如下:
下面修改一下样式:
view {navigator {display: flex;flex-direction: column;align-items: center;}image {width: 80rpx;height: 80rpx;}text {font-size: 24rpx;margin-top: 12rpx;}}
- navigator:
- display: flex;:使用弹性盒布局,使得子元素可以灵活地排列。
- flex-direction: column;:将子元素垂直排列(从上到下)。
- align-items: center;:将子元素在交叉轴(水平轴)上居中对齐。
- image:
- width: 80rpx;:设置图像的宽度为80rpx(responsive pixel,响应式像素),适应不同屏幕尺寸。
- height: 80rpx;:设置图像的高度为80rpx,保持图像的正方形比例。
- text:
- font-size: 24rpx;:设置文本的字体大小为24rpx,确保在不同设备上有良好的可读性。
- margin-top: 12rpx;:在文本和上方的图像之间添加12rpx的上外边距,增加视觉上的间距,使得布局更加美观。
参考视频:尚硅谷微信小程序开发教程
相关文章:

小程序组件 —— 26 组件案例 - 跳转到商品列表
在上一节实现了商品导航区域,这一节实现跳转到商品列表的功能;当用户在点击商品导航时,需要能够跳转到商品列表页面;在微信小程序中,如果需要进行跳转,需要使用 navigator 组件,navigator 组件有…...

【Spring学习】为什么Spring中的IOC(控制反转)能够降低耦合性(解耦)?
为什么Spring中的IOC能够降低耦合性? 前言1.传统方式2.使用接口3.工厂方法4.反射改造工厂类5.IOC总结参考 前言 本文目标:本文旨在讲解为什么IOC能够降低耦合性。 情景:假设你是一个爱摸鱼的程序员,现在需要测试一个游戏&#x…...

机场安全项目|基于改进 YOLOv8 的机场飞鸟实时目标检测方法
目录 论文信息 背景 摘要 YOLOv8模型结构 模型改进 FFC3 模块 CSPPF 模块 数据集增强策略 实验结果 消融实验 对比实验 结论 论文信息 《科学技术与工程》2024年第24卷第32期刊载了中国民用航空飞行学院空中交通管理学院孔建国, 张向伟, 赵志伟, 梁海军的论文——…...

卸载干净 IDEA(图文讲解)
目录 1、卸载 IDEA 程序 2、注册表清理 3、残留清理 1、卸载 IDEA 程序 点击屏幕左下角 Windows 图标 -> 设置-控制面板->intellij idea 勾选第一栏 Delete IntelliJ IDEA 2022.2 caches and local history,表示同时删除 IDEA 本地缓存以及历史。 Delete I…...

云端微光,AI启航:低代码开发的智造未来
文章目录 前言一、引言:技术浪潮中的个人视角初次体验腾讯云开发 Copilot1.1 低代码的时代机遇1.1.1 为什么低代码如此重要? 1.2 AI 的引入:革新的力量1.1.2 Copilot 的亮点 1.3 初学者的视角1.3.1 Copilot 带来的改变 二、体验记录ÿ…...

工程师了解的Lua语言
1、关于lua语言 lua语言是用于嵌入式领域当中的一门脚本语言,其实在大学期间,我也没有接触过这门语言,但是在未来的发展之路当中,需要用到这门语言,所以在我的知识库当中添加这门语言知识是必要而且重要的,…...

著名的软件都用什么语言编写?
你是否曾经好奇,身边那些耳熟能详的软件,它们究竟是用什么语言编写的?从操作系统到浏览器、从数据库到编程工具,每一款软件背后都承载着开发者们的智慧与技术选型。那么,究竟哪些编程语言成就了这些世界级的软件呢&…...

设计模式 结构型 代理模式(Proxy Pattern)与 常见技术框架应用 解析
代理模式(Proxy Pattern)是一种常见的设计模式,在软件开发中有着广泛的应用。其核心思想是通过创建一个代理类来控制对另一个对象的访问,从而实现对目标对象功能的扩展、保护或其他附加操作。 一、核心思想 代理模式的核心思想在…...

Linux环境(CentOs7) 安装 Node环境
Linux环境(CentOs7) 安装 Node环境 使用NodeSource安装Node.js 1、清除缓存(可选但推荐) sudo yum clean all2、添加NodeSource仓库,根据你想要安装的Node.js版本,选择相应的NodeSource安装脚本。例如&am…...

Tailwind CSS 实战:现代登录注册页面开发
在前端开发中,登录注册页面是最常见的需求之一。一个设计精美、交互友好的登录注册页面不仅能提升用户体验,还能增加产品的专业度。本文将详细介绍如何使用 Tailwind CSS 开发一个现代化的登录注册页面。 设计思路 在开始编码之前,我们先明…...

Unity2022接入Google广告与支付SDK、导出工程到Android Studio使用JDK17进行打包完整流程与过程中的相关错误及处理经验总结
注:因为本人也是第一次接入广告与支付SDK相关的操作,网上也查了很多教程,很多也都是只言片语或者缺少一些关键步骤的说明,导致本人也是花了很多时间与精力踩了很多的坑才搞定,发出来也是希望能帮助到其他人在遇到相似问…...
反向传播算法的偏置更新步骤
偏置的更新步骤 假设我们有一个三层神经网络(输入层、隐藏层和输出层),并且每层的激活函数为 sigmoid 函数。我们需要更新隐藏层和输出层的偏置。以下是详细的步骤: 1. 计算误差项(Error Term) 输出层的…...

条款47:请使用 traits classes 表现类型信息(Use traits classes for information about types)
条款47:请使用 traits classes 表现类型信息 1.1 提出问题 想一想,下面的功能如何实现?(可以查看std::advance源码) template<typename IterT, typename DistT> void advance(IterT& iter, DistT d); /…...

yolov5和yolov8的区别
1. yolov5有建议框,yolov8没有建议框 2. yolov5标签中有自信度,而yolov8没有自信度。因为自信度是建议框和真实框的交集 3. yolov5有三个损失函数,回归问题:预测框和建议框的损失(中心点宽高偏移量的损失):CIOUFocal…...

Redis 实现分布式锁
文章目录 引言一、Redis的两种原子操作1.1 Redis 的原子性1.2 单命令1.3 Lua 脚本1.4 对比单命令与 Lua 脚本 二、Redis 实现分布式锁2.1 分布式锁的概念与需求2.1.1 什么是分布式锁?2.1.2 分布式锁的常见应用场景 2.2 基于 Redis 的分布式锁实现2.2.1 锁的获取与释…...

django StreamingHttpResponse fetchEventSource实现前后端流试返回数据并接收数据的完整详细过程
django后端环境介绍: Python 3.10.14 pip install django-cors-headers4.4.0 Django5.0.6 django-cors-headers4.4.0 djangorestframework3.15.2 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 总环境如下: Package Version -…...

SpringSpringBoot常用注解总结
目录 1. SpringBootApplication 2. Spring Bean 相关 2.1. Autowired 2.2. Component,Repository,Service, Controller 2.3. RestController 2.4. Scope 2.5. Configuration 3. 处理常见的 HTTP 请求类型 3.1. GET 请求 3.2. POST 请求 3.3. PUT 请求 3.4. DELETE 请…...

24.小R的随机播放顺序<字节青训营-中等题>
1.题目 问题描述 小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌,播放后将其从歌单中移除。如果歌单中还有歌曲,则会将当前第一首歌移到最后一首。这个过程会一直重复,直到歌单中没有任何歌曲。 例如,给定歌单 [5, …...

【QT】增删改查 XML 文件的类
使用单例类模板实现的对XML文件的节点、属性、文本进行增删改查,可以直接用! 直接POST代码,比较简单好用。 针对以下格式的xml文件比较适用 每个节点的名称都不一样,节点包含了各种属性。 <?xml version="1.0" encoding="UTF-8"?> <config…...

Linux-掉电保护方案
参考链接 https://blog.csdn.net/pwl999/article/details/109411919硬件设计 设备树 驱动程序 #include <linux/module.h> #include <linux/init.h> #include <linux/interrupt.h> #include <linux/gpio.h>int irq;//中断服务函数 irqreturn_t tes…...

php获取字符串中的汉字
在PHP中,可以使用正则表达式来提取字符串中的汉字。汉字通常位于Unicode范围\u4e00-\u9fa5之内,因此可以使用preg_match_all函数配合适当的正则表达式来实现。 以下是一个PHP代码示例,它会从给定的字符串中提取出所有的汉字: fu…...

java: JDK isn‘t specified for module ‘product-service‘问题解决
目录 问题 解决方法 1.打开File->Project Structure... 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12,并Apply,OK 问题 添加module后报错:java: JDK isnt specified for module product-service 查看pom.xml文件也添加了对应的JDK…...

使用工厂+策略模式实现去除繁琐的if else
使用工厂策略模式实现去除繁琐的if else 在中间有一个mapstruct的bug,即在修改实体类中的类型时,或者修改属性名字,mapstruct都无法进行转换,会报错,此时需要maven cleanmaven compile即可 前言 在这次的开发中&#…...

Dubbo3入门项目搭建
开发环境:jdk8、dubbo3.2.9、nacos2.3.0、springboot2.7.17、dubbo-admin0.6.0。 Dubbo 是一个高性能的 Java RPC(远程调用)框架,最初由阿里巴巴开发并开源,主要用于构建 SOA 架构下的分布式应用系统( soa简单理解就是…...

形象地理解UE4中的数据结构 TLinkedListBase
大家都熟知链表,但不一定能快速看懂UE4中的数据结构。 TLinkedListBase表示“链接”中的一个结点,有三个成员: 一、ElementType Element; 表示具体的业务,例如int链条中的一个整数。 二、NextLink 表示 “下一个Node”&#…...

Python自然语言处理利器:SnowNLP模块深度解析、安装指南与实战案例
Python自然语言处理之SnowNLP模块介绍、安装与常见操作案例 一、SnowNLP模块介绍 SnowNLP是一个专为中文文本设计的Python库,它基于自然语言处理技术,提供了多种功能,包括分词、词性标注、情感分析、文本转换(简繁转换ÿ…...

Llama系列关键知识总结
系列文章目录 第一章:LoRA微调系列笔记 第二章:Llama系列关键知识总结 第三章:LLaVA模型讲解与总结 文章目录 系列文章目录Llama: Open and Efficient Foundation Language Models关键要点LLaMa模型架构:Llama2分组查询注意力 (G…...

【开源】创建自动签到系统—QD框架
1. 介绍 QD是一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。 主要通过抓包获取到HAR来制作任务模板,从而实现异步响应和发起HTTP请求 2. 需要环境 2.1 硬件需求 CPU:至少1核 内存:推荐 ≥ 1G 硬盘:推…...

CDP集群安全指南系列文章导读
[一]大数据安全综述 1-认证 身份验证是任何计算环境的基本安全要求。简单来说,用户和服务必须在使用系统功能并获得授权之前,向系统证明其身份(进行身份验证)。身份验证与授权紧密配合,共同保护系统资源。大多数 CDH …...

MT8788安卓核心板_MTK8788核心板参数_联发科模块定制开发
MT8788安卓核心板是一款尺寸为52.5mm x 38.5mm x 2.95mm的高集成度电路板,专为各种智能设备应用而设计。该板卡整合了处理器、图形处理单元(GPU)、LPDDR3内存、eMMC存储及电源管理模块,具备出色的性能与低功耗特性。 这款核心板搭载了联发科的MT8788处理…...