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

小程序组件 —— 26 组件案例 - 跳转到商品列表

在上一节实现了商品导航区域,这一节实现跳转到商品列表的功能;当用户在点击商品导航时,需要能够跳转到商品列表页面;在微信小程序中,如果需要进行跳转,需要使用 navigator 组件,navigator 组件有两个常用的属性:

  • url:当前小程序内的跳转链接,也就是点击之后需要跳转到的页面路径;
  • open-type:跳转方式
    • navigate:保留当前页面,跳转到应用内的某个页面,但是不能跳到 tabbar 页面;
    • redirect:关闭当前页面,跳转到应用内的某个页面,但是不能跳到 tabbar 页面;
    • switchTab:跳转到 tabbar 页面,并关闭其它所有非 tabbar 页面;
    • reLaunch:关闭所有页面,打开到应用内的某个页面;
    • navigateBack:关闭当前页面,返回上一页面或多级页面;

使用 navigator 时有两个注意事项:

  • url 路径后可以带参数。参数和路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔,例如:/list?id=10&name=hualist 页面可以在 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>

在这里插入图片描述
虽然 navigateredirect 都是只能跳转到非 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 方法用于关闭所有页面并打开到应用内的某个页面。与其他页面跳转方法(如 navigateToredirectToswitchTab)相比,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 默认只能返回上一页,如果需要返回前几页,需要添加一个属性 deltadelta 用于控制返回的层级(指定返回前几页):

<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 组件案例 - 跳转到商品列表

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

【Spring学习】为什么Spring中的IOC(控制反转)能够降低耦合性(解耦)?

为什么Spring中的IOC能够降低耦合性&#xff1f; 前言1.传统方式2.使用接口3.工厂方法4.反射改造工厂类5.IOC总结参考 前言 本文目标&#xff1a;本文旨在讲解为什么IOC能够降低耦合性。 情景&#xff1a;假设你是一个爱摸鱼的程序员&#xff0c;现在需要测试一个游戏&#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&#xff0c;表示同时删除 IDEA 本地缓存以及历史。 Delete I…...

云端微光,AI启航:低代码开发的智造未来

文章目录 前言一、引言&#xff1a;技术浪潮中的个人视角初次体验腾讯云开发 Copilot1.1 低代码的时代机遇1.1.1 为什么低代码如此重要&#xff1f; 1.2 AI 的引入&#xff1a;革新的力量1.1.2 Copilot 的亮点 1.3 初学者的视角1.3.1 Copilot 带来的改变 二、体验记录&#xff…...

工程师了解的Lua语言

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

著名的软件都用什么语言编写?

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

设计模式 结构型 代理模式(Proxy Pattern)与 常见技术框架应用 解析

代理模式&#xff08;Proxy Pattern&#xff09;是一种常见的设计模式&#xff0c;在软件开发中有着广泛的应用。其核心思想是通过创建一个代理类来控制对另一个对象的访问&#xff0c;从而实现对目标对象功能的扩展、保护或其他附加操作。 一、核心思想 代理模式的核心思想在…...

Linux环境(CentOs7) 安装 Node环境

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

Tailwind CSS 实战:现代登录注册页面开发

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

Unity2022接入Google广告与支付SDK、导出工程到Android Studio使用JDK17进行打包完整流程与过程中的相关错误及处理经验总结

注&#xff1a;因为本人也是第一次接入广告与支付SDK相关的操作&#xff0c;网上也查了很多教程&#xff0c;很多也都是只言片语或者缺少一些关键步骤的说明&#xff0c;导致本人也是花了很多时间与精力踩了很多的坑才搞定&#xff0c;发出来也是希望能帮助到其他人在遇到相似问…...

反向传播算法的偏置更新步骤

偏置的更新步骤 假设我们有一个三层神经网络&#xff08;输入层、隐藏层和输出层&#xff09;&#xff0c;并且每层的激活函数为 sigmoid 函数。我们需要更新隐藏层和输出层的偏置。以下是详细的步骤&#xff1a; 1. 计算误差项&#xff08;Error Term&#xff09; 输出层的…...

条款47:请使用 traits classes 表现类型信息(Use traits classes for information about types)

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

yolov5和yolov8的区别

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

Redis 实现分布式锁

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

django StreamingHttpResponse fetchEventSource实现前后端流试返回数据并接收数据的完整详细过程

django后端环境介绍&#xff1a; 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 总环境如下&#xff1a; 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有一个特殊的随机播放规则。他首先播放歌单中的第一首歌&#xff0c;播放后将其从歌单中移除。如果歌单中还有歌曲&#xff0c;则会将当前第一首歌移到最后一首。这个过程会一直重复&#xff0c;直到歌单中没有任何歌曲。 例如&#xff0c;给定歌单 [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…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

spring boot使用HttpServletResponse实现sse后端流式输出消息

1.以前只是看过SSE的相关文章&#xff0c;没有具体实践&#xff0c;这次接入AI大模型使用到了流式输出&#xff0c;涉及到给前端流式返回&#xff0c;所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...