0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

小程序框架页面栈设计案例解析

电子工程师 ? 来源:博客园 ? 作者: 姜友瑶 ? 2020-11-04 13:55 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

刚开始用小程序的时候没怎么在意页面的跳转,也没仔细看文档中说的页面栈的内容。只要能跳转就行,wx.navigateTo,wx.redirectTo 这些方法一顿乱用。最后在做一个5层页面的时候跳懵了。各种重复跳页,怎么改都不好使,于是安心下来仔细看看API,发现这个路由还是有学问的。因此分享一下,希望对做小程序的网友也有一定的帮助。

页面栈

首先我们要理解在小程序中页面的路由是小程序框架本身控制的我们不要去手动管理, 小程序框架通过一个页面栈的设计来管理所有的界面,为了便于理解你可以看一下示意图。

?

如图所示小程序的页面栈最大能存放5个页面,当页面栈中的页面等于5时,在使用navigateTo这种方式是不能再跳页的。

下面我们分析一下页面栈的变化过程,从分析中,我们需要明白的一个重要问题就是,当客户按返回按钮的时候究竟会跳转到那个界面,这是我们分析页面栈变化的的意义。

首先我们在页面中调用两次navigateTO,页面栈情况如下

?

这时显示的界面是pageC ,如果客户在此时返回则会一切正常,回退的第一个界面是pageB,然后是pageA。但是如果在pageC 界面调用 wx.redirectTo({url:'pageD'}) 则情况就会不一样看,我们先看一下跳转到pageD后页面栈的情况如何。

?

根据栈的情况,我们可以分析出。如果使用 wx.redirectTo跳转到pageD页面,然后在回退的时候是不能再次回退到pageC的,而会直接回退到pageB。

通过上面对页面栈的分析,我们可以看到栈的变化是会影响客户回退页面的顺序的,所以根据自己的需要合理的使用不同的跳转方法是非常重要的。如果使用不当就会导致跳转混乱让人摸不清头脑

下面分析一种调转重复页面的情况

如果我们的pageB页面是一个数据列表页面,比如商品列表,pageC是一个商品的编辑界面,一般我们会通过pageB然后进如pageC对商品进行修改,修改后返回pageB。这是很常见的一个场景,但是如果使用不当机会出现如下情况

?

如图所示栈中出现了两个相同的pageB界面,这个时候如果用户按退出键就会出现一个页面出现2次的情况,而且有一个界面的数据也是旧的数据。因此为了避免这个问题,我们应该在 PageC 页面避免将 PageB重复压入栈中,所以在pageC页面 使用wx.navigateBack({delta:1}); 进行页面回退。而数据刷新的问题则在页面的onShow函数中进行即可。

路由方法与页面栈变化对应关系


特别注意:

navigateTo,redirectTo只能打开非 tabBar 页面。

switchTab只能打开 tabBar 页面。

reLaunch可以打开任意页面。

页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。

调用页面路由带的参数可以在目标页面的onLoad中获取。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1724

    浏览量

    64558
  • 路由
    +关注

    关注

    0

    文章

    280

    浏览量

    42614
  • 小程序
    +关注

    关注

    1

    文章

    243

    浏览量

    13005
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入浅出解析低功耗蓝牙协议

    Bluetooth LE协议为什么要分层?怎么理解Bluetooth LE“连接”?如果Bluetooth LE协议只有ATT层没有GATT层会发生什么? 一、协议框架 一般而言,我们把某个
    的头像 发表于 04-09 14:49 ?632次阅读
    深入浅出<b class='flag-5'>解析</b>低功耗蓝牙协议<b class='flag-5'>栈</b>

    让您的应用为16KB页面大小的设备做好准备

    (提升幅度为 5-10%)。我们在《为 Android 添加 16 KB 页面大小》一文中提供了深入的技术解析,并重点展示了性能改进。
    的头像 发表于 01-07 09:26 ?1200次阅读

    鸿蒙原生页面高性能解决方案上线OpenHarmony社区 助力打造高性能原生应用

    。 HMrouter:简化页面跳转逻辑HMrouter是HarmonyOS NEXT出色的路由框架解决方案,专注于优化应用内原生页面跳转逻辑,它封装系统 Navigation,集成
    发表于 01-02 18:00

    OpenHarmony程序分析框架论文入选ICSE 2025

      近日,ICSE 2025软件工程实践Track放榜,面向OpenAtom OpenHarmony(以下简称“OpenHarmony”)的ArkTS程序分析基础框架--方舟程序分析器(论文题目为
    的头像 发表于 01-02 13:41 ?1307次阅读
    OpenHarmony<b class='flag-5'>程序</b>分析<b class='flag-5'>框架</b>论文入选ICSE 2025

    HarmonyOS Next 应用元服务开发-应用接续动态配置迁移按需迁移页面

    按需迁移页面,支持应用动态选择是否进行页面恢复(默认进行页面信息恢复)。如果应用不想使用系
    发表于 12-26 15:23

    AUTOSAR通信协议解析 如何实现AUTOSAR通信

    通信协议是一个复杂的系统,它涵盖了多种通信方式和模块,以实现车内ECU之间的高效、可靠的数据交换。以下是对AUTOSAR通信协议的解析及实现AUTOSAR通信的方法: 一、AUTOSAR通信协议解析
    的头像 发表于 12-17 14:54 ?3201次阅读

    SSM框架的源码解析与理解

    MVC模式,使得开发Web应用程序变得更加高效和简单。 1. Spring框架 基本功能: Spring是一个开源的Java平台,它提供了全面的基础设施支持,以便开发Java应用程序。Spring
    的头像 发表于 12-17 09:20 ?1075次阅读

    SSM框架在Java开发中的应用 如何使用SSM进行web开发

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web开发中常用的技术。它通过分层架构,实现了视图、控制、业务逻辑和数据访问的分离,提高了代码的可维护性和可扩展性
    的头像 发表于 12-16 17:28 ?1766次阅读

    HarmonyOS Web页面加载的原理和优化方法

    在移动互联网时代,应用的页面渲染速度对于用户体验至关重要。相对于原生页面,Web页面的性能存在多方面的技术挑战。本文以HarmonyOS的ArkWeb组件为基础,介绍了Web页面加载中
    的头像 发表于 12-05 15:14 ?1166次阅读
    HarmonyOS Web<b class='flag-5'>页面</b>加载的原理和优化方法

    深度解析研华全式AI产品布局

    在人工智能迈向边缘智能化的浪潮中,研华科技通过“Edge AI+生态协同”战略推动AIoT 2.0时代的产业落地。本文专访研华科技产品总监邱柏儒,深度解析研华全式AI产品布局、差异化技术积累与生态共创实践。
    的头像 发表于 12-05 09:51 ?1152次阅读

    JavaWeb框架比较

    JavaWeb框架为开发人员提供了构建Web应用程序所需的基础设施和组件,每种框架都有其独特的特点和适用场景。以下是对几种主流JavaWeb框架的比较: Spring MVC 优点
    的头像 发表于 11-25 09:14 ?784次阅读

    HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)技能调用方案概述

    一、概述 技能调用是意图框架依托系统AI多模态大模型能力做深度用户输入理解,并通过解析的用户意图对接应用或元服务内的功能和内容。 二、场景体验 用户通过对小艺对话进行自然语言输入实现内容查询,知识
    发表于 11-08 15:38

    简述大前端技术的渲染原理

    应用开发:Android、iOS、鸿蒙(HarmonyOS)等; ?Web前端框架:Vue、React、Angular等; ?小程序开发:微信小程序、京东小程序、支付宝小
    的头像 发表于 11-07 10:11 ?741次阅读

    Linux网络协议的实现

    网络协议是操作系统核心的一个重要组成部分,负责管理网络通信中的数据包处理。在 Linux 操作系统中,网络协议(Network Stack)负责实现 TCP/IP 协议簇,处理应用程序发起的网络
    的头像 发表于 09-10 09:51 ?898次阅读
    Linux网络协议<b class='flag-5'>栈</b>的实现

    串口服务器和TCP/IP协议是什么关系

    串口服务器与TCP/IP协议之间存在着紧密而复杂的关系。这种关系主要体现在串口服务器如何利用TCP/IP协议来实现串口设备与网络之间的数据通信。以下是对这种关系的详细解析
    的头像 发表于 08-25 17:35 ?2214次阅读