微信小程序学习笔记 (小程序页面学习 三 逻辑层 页面路由 基础食用方法)

目录结构
目录结构
这是我小程序的目录结构

页面学习

逻辑层(App Service)

   小程序开发框架的逻辑层由 JavaScript 编写。
   逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。
   在JavaScript 的基础上,我们做了一些修改,以方便地开发小程序。
    ¤ 增加AppPage方法,进行程序和页面的注册。
    ¤ 增加getAppgetCurrentPages 方法,分别用来获取 App 实例和当前页面栈。
    ¤ 提供丰富的API,如微信用户数据,扫一扫,支付等微信特有能力。
    ¤ 每个页面有独立的作用域,并提供模块化能力。
    ¤ 由于框架并非运行在浏览器中,所以JavaScript 在 web 中一些能力都无法使用,如 documentwindow 等。
    ¤ 开发者写的所有代码最终将会打包成一份JavaScript,并在小程序启动的时候运行,直到小程序销毁。类似 ServiceWorker,所以逻辑层也称之为 App Service。

页面路由

在小程序中所有页面的路由全部由框架进行管理。

页面栈

栈的解释

栈是一种先进后出的数据结构, 具体信息可以百度,但是其使用大致如下就如快速开始模板, 刚开始我们进入小程序,这时index在页面栈顶端, 之后我们登录后进入了,日志logs页面这时logs在页面栈最顶端, index在他下面,之后我们点击后退,页面栈将logs弹出,这是index在页面栈最顶端, 这个栈其实也很像我们日常生活中的放盘子放碗,可以自己拿几个盘子碗试试,别把东西摔了

页面栈解释

框架以栈的形式维护了所有的页面, 当发生页面路由切换的时候, 页面栈的表现如下 :

路由方式页面栈表现
初始化新页面入栈
打开新页面新页面入栈
页面重定向当前页面出栈,新页面入栈
页面返回页面不断出栈,直到目标返回页,新页面入栈
Tab切换页面全部出栈,只留下新的Tab页面
重加载页面全部出栈,只留下新的页面

getCurrentPages()

getCurrentPages() 用于获取当前页面栈实例,以数组的形式按栈的顺序给出,第一个为首页,最后一个为当前页面
不要修改页面栈,会导致路由以及页面状态错误,后果自负

路由方式

对于路由的触发方式以及页面生命周期的函数如下 :

路由方式触发时机路由前页面路由后页面
初始化小程序打开的第一个页面onLoad``onShow
打开新页面调用APIwx.navigateTo 或使用组件<navigator open-type="navigateTo"/>onHideonLoad,OnShow
页面重定向调用APIwx.redirectTo或使用组件<navigator open-type="redirectTo"/>onUnloadonLoad,onShow
页面返回调用 APIwx.navigateBack或使用组件<navigator open-type="navigateBack">或用户按左上角返回按钮onUnloadonShow
Tab切换调用 APIwx.switchTab或使用组件<navigator open-type="switchTab"/>或用户切换 Tab各种情况参考Tab切换对应生命周期
重加载调用 APIwx.reLaunch或使用组件<navigator open-type="reLaunch"/>onUnloadonLoad,onShow

代码模拟
代码环境 共有 A B C D 四个页面 , A 会重定向到 B , B也会重定向到A, A会跳到C, C会跳到D. 所有页面均实现了 onLoad(), onShow, onUnload

  1. 初始化 A
    初始化
  2. 打开新页面 由 A 打开 C , C 打开 D
    打开新页面
  3. 页面重定向 A重定向到B, B重定向到A
    页面重定向
  4. 页面返回 D返回 C, C 返回 A
    页面返回
  5. Tab切换 后面详情
  6. 重加载 D 完成重加载操作
    重加载

Tab切换方式对应的生命周期(以A,B页面为Tabbar页面,C是从A页面打开的页面,D是从C页面打开的页面为例)

当前页面路由后页面触发的生命周期(按顺序)
AA没有发生任何事情,Nothing happend
AB(初次)A.onHide(),B.onLoad(),B.onShow()
AB(再次打开)A.onHide(),B.onShow()
CAC.onUnload(),A.onShow()
CBC.onUnload(),B.onLoad(),B.onShow()
DBD.onUnload(),C.onUnload(),B.onLoad(),B.onShow()
D(从转发进入)AD.onUnload(),A.onLoad(),A.onShow()
D(从转发进入)BD.onUnload(),B.onLoad(),B.onShow()

代码模拟
代码环境 共有 A B C D 四个页面 , A 会重定向到 B , B也会重定向到A, A B,在下面的TabBar里面, A会跳到C, C会跳到D. 所有页面均实现了 onLoad(), onShow, onUnload,D可以跳到A,B

  1. A->A
    A->A
  2. A->B(初次)
    A->B(初次)
  3. A->B(再次)
    A->B(再次)
  4. C->A
    C->A
  5. C->B
    C->B
  6. D->B
    D->B
  7. D(转发进入) -> A
    D(转发进入) -> A
  8. D(转发进入) -> B
    D(转发进入) -> B

注意:

  • navigateTo, redirectTo 只能打开非 tabBar 页面。
  • switchTab 只能打开 tabBar 页面。
  • reLaunch 可以打开任意页面。
  • 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
  • 调用页面路由带的参数可以在目标页面的onLoad中获取。

实验代码下载
微信代码片段 wechatide://minicode/dRW3TFmO69ZR
导入步骤
导入代码片段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值