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

    文章

    2469

    浏览量

    66998
  • 路由
    +关注

    关注

    0

    文章

    285

    浏览量

    43761
  • 小程序
    +关注

    关注

    1

    文章

    243

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Python全一课通(470集)(12.96 GB)-网盘资源下载

    在当今的职场生态中,存在着一种极其危险的“技能孤岛现象”。很多程序员凭借某一单一框架或某一特定岗位的熟练度拿到入场券,便开始在自己的舒适区里“计件打工”。然而,随着技术迭代与经济周期的波动,这种
    发表于 04-19 16:30

    RT-Thread任务+消息订阅管理框架软件包:thread_manager+event_loop

    一.有个简单的问题(什么是爱情)为什么开源RTOS都只将我们送到Main?却没有一个开源的任务管理+消息订阅框架+延时消息处理框架。就像LVGL好像没有开源的类似于手表功能页面切换框架
    的头像 发表于 04-19 15:39 1673次阅读
    RT-Thread任务+消息订阅管理<b class='flag-5'>框架</b>软件包:thread_manager+event_loop

    Vibe Coding AI全开发实战

    Vibe Coding AI全:效率翻倍的开发新方式 在科技飞速发展的当下,软件开发领域正经历着一场深刻的变革。传统的编程模式逐渐被一种新兴的、以AI为核心的全开发方式所取代,其中Vibe
    发表于 04-15 16:02

    LuatOS框架的使用(上)

    环境搭建、模块调用到任务调度,全面解析其开发流程与最佳实践。 本篇文章主要讲LuatOS 框架;LuatOS 框架是整个 LuatOS 开发中最基础也是最核心的内容,无论使用 LuatOS 开发什么功能,都会用到它; LuatO
    的头像 发表于 01-27 19:38 331次阅读
    LuatOS<b class='flag-5'>框架</b>的使用(上)

    沐曦股份MXMACA软件3.3.0.X版本技术解析

    ,作为沐曦“自主GPGPU硬件+全软件体系”的关键协同载体,如图1所示,MACA承担着连接硬件算力单元与上层应用生态的核心纽带作用,覆盖底层驱动、用户态接口、编译器、算子适配、训练框架、推理框架、行业场景优化等全链路能力,是支
    的头像 发表于 12-24 09:08 1160次阅读
    沐曦股份MXMACA软件<b class='flag-5'>栈</b>3.3.0.X版本技术<b class='flag-5'>解析</b>

    Stack到底用来干嘛的呢?

    我们在函数的局部变量、数组这些不能超过1K(含嵌套的函数),否则程序就会崩溃进入hardfaul。 除了这些局部变量以外,还有一些实时操作系统的现场保护、返回地址都是存储在里面。 还有一点题外话,就是的增长方向是从高地址到低
    发表于 12-01 08:04

    堆和的区别

    一个由C/C 编译的程序占用的内存分为以下几个部分: 区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的。 堆区(heap):一般由
    的头像 发表于 11-27 18:13 1221次阅读

    PYQT 应用程序框架及开发工具

    大家好,本团队此次分享的内容为开发过程中使用到的PYQT 应用程序框架及开发工具。 pYqt 是一个多平台的 python 图形用户界面应用程序框架,由于其面向对象、 易扩展(可
    发表于 10-29 07:15

    如何在应用程序调试期间分析和堆使用情况

    随着 AMD Vitis 统一软件平台 2021.2 的发布,Vitis 引入了一个 Tcl 脚本,用于在应用程序运行的特定时间点协助查找和堆的内存使用情况。该脚本已延续到后续的 Vitis 版本
    的头像 发表于 10-24 16:54 1035次阅读
    如何在应用<b class='flag-5'>程序</b>调试期间分析<b class='flag-5'>栈</b>和堆使用情况

    M95P08-x:面向超低功耗应用的8Mbit SPI页面EEPROM

    STMicroelectronics M95P08-x超低功耗串行SPI页面EEPROM采用先进的专有NVM技术。M95P08-x具有字节灵活性、页面可更改性、高页面循环性性能,以及等同于
    的头像 发表于 10-24 09:41 707次阅读
    M95P08-x:面向超低功耗应用的8Mbit SPI<b class='flag-5'>页面</b>EEPROM

    使用RT-Thread Studio在程序进Hardfault时怎么方便的查看调用

    求助各位大神 使用RT-Thread Studio在程序进Hardfault时怎么方便的查看调用 使用MDK的时候可以方便的看调用堆栈,从而很快速的找到问题,使用RT-Thread Studio该如何快速找到问题呢
    发表于 10-10 06:54

    知乎开源“智能预渲染框架” 几行代码实现鸿蒙应用页面“秒开”

    近日,知乎在Gitee平台开源了其自研的鸿蒙“智能预渲染框架”,并将该框架的Har包上架到OpenHarmony三方库中心仓。该框架在鸿蒙平台首创“智能预渲染”技术,旨在破解应用复杂页面
    的头像 发表于 08-29 14:32 704次阅读
    知乎开源“智能预渲染<b class='flag-5'>框架</b>” 几行代码实现鸿蒙应用<b class='flag-5'>页面</b>“秒开”

    RDMA over RoCE V2设计2:ip 整体框架设计考虑

    解析、不变循环冗余校验(ICRC)生成等功能。 以太网协议模块负责解析及组装网络包,完成网络层级中传输层、网络层及网络接口层功能。首先,该模块接收来自融合以太网协议的网络包,并为
    发表于 07-16 08:51

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、生命周期阶段: 创建阶段 build: 构建组件
    的头像 发表于 07-11 18:24 1183次阅读

    开发进阶指南:LuatOS-log库从入门到实战!

    本文将带你深入探索LuatOS系统中log库的核心原理与实战技巧,通过代码示例解析日志管理、错误追踪及性能优化的最佳实践,助力全工程师构建更稳健的物联网应用。 今天,我们一起来认识LuatOS
    的头像 发表于 05-15 16:12 2999次阅读
    全<b class='flag-5'>栈</b>开发进阶指南:LuatOS-log库从入门到实战!