![微信小程序开发从零开始学](https://wfqqreader-1252317822.image.myqcloud.com/cover/976/44509976/b_44509976.jpg)
2.4 生命周期与页面跳转
在Android、iOS开发中,每个页面都有属于自己的生命周期,包括创建页面执行、进入页面执行、离开页面执行等。微信小程序的页面样式与App非常相似,所以生命周期也大体相同。在一个应用有了页面后,它们之间就要进行跳转、返回了,这就是所谓的页面跳转功能。本节将会创建一个新的Demo,讲一讲页面的生命周期与跳转。
2.4.1 生命周期函数
【示例2-4】
(1)新建一个项目PageTest,AppID选择测试号,如图2.3所示。
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P29_13301.jpg?sign=1739357645-t82T35Td6Boj0zY85taRbwfvZ9mLKj4Z-0-f86ea4471cd96939996e91e757fad6b0)
图2.3 创建新项目PageTest
(2)创造两个页面,用于本节的演示。新建两个文件夹home、detail,并在文件夹下创建同名的Page。之后删除项目自动生成的index、logs这两个文件夹,如图2.4所示。
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P29_13302.jpg?sign=1739357645-JOx3w7I5Z58NTNQRM1XJHB6YcLr9dBG5-0-194400de663de171aac8e913fb8692e9)
图2.4 创建新的Page
(3)现在可能会报错:找不到index和logs页面。只需要在app.json中删除依赖即可,代码如下:
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P30_39626.jpg?sign=1739357645-rRzLqLE65dxd2oXsmtgunzVcrn1Hkh1I-0-80a871827445a39ef99493871015c1a4)
提示
第1章讲过,pages这个数组是存放页面的,如果有不存在的页面,它肯定会报错。那么如何控制首页加载哪个页面呢?很简单,写在第1行就会被加载为首页。读者可以将第1行的home改成detail进行测试。
(4)将app.js中多余的代码都删除掉,代码如下:
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P30_39628.jpg?sign=1739357645-iC5HlvgsJz1toM9tQcuH4nLYCyAqrgUN-0-05acaf465760a071f58e2f16779d4fe5)
(5)现在准备工作已经完成。打开home.js,可以看到里面已经生成了一些代码,删掉无用的代码,给生命周期函数加上注释和console.log来监控它们的执行状态,代码如下:
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P30_39629.jpg?sign=1739357645-J4W3VFUy6cg520UIBK1vMBIZy0JhoYsn-0-58644938c45a405e0cfa1142872b9823)
(6)运行代码,可以看到控制台中的输出,如图2.5所示。
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P31_6266.jpg?sign=1739357645-GrnKnGdfMya8WJs3xk8hbkJKWoRaf8B3-0-d4ef09cd36dc78c0ccc236dd0cf4918e)
图2.5 生命周期函数的输出
通过输出项,我们可以得出以下几个结论:
· 执行顺序为onLoad、onShow、onReady。
· onLoad方法在创建时会执行,只执行一次,可以进行一些数据操作。
· onShow方法会在页面返回时执行,下一节会进行测试。
· onReady方法会在页面渲染完成后执行一次,可以执行一些UI操作。
页面的切换和隐藏通常是在页面跳转时发生的,所以剩下的几个方法和onShow方法的测试留到下一小节。
2.4.2 页面跳转
在上一小节,我们对组件的生命周期做了讲解,本小节中主要讲解页面跳转,并结合起来深入解释生命周期。
想要进行页面跳转,主要有两种方法,下面通过示例来说明。
【示例2-5】
本例实现了从home页跳转到detail页,代码如下:
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P32_39631.jpg?sign=1739357645-n1Uxo3AytSUexWbWxecW0V9qcu585GZb-0-0739afffea6aa1dc067f1df6e592b384)
(1)方法一:这个跳转方式最为常见,创造一个按钮,然后在wxs中实现点击事件,其中url填写跳转页面的相对路径即可。
(2)方法二:利用微信提供的navigator组件,可以直接通过设置url和open-type实现跳转。navigator是导航组件的一种,在后面的章节会有详细讲解,当前优先使用在JS中完成跳转的方法。
接下来点击页面跳转,可以看到控制台输出,如图2.6所示。
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P32_6401.jpg?sign=1739357645-81YLTEhuH1zclJz6dr6YNRxf4w88Hnh4-0-d04075e33711017ca815e1fc7367c1bd)
图2.6 跳转页面输出
可以看到,在页面跳转的时候输出了“执行onHide”,那么为什么没有出现“执行onUnload”呢?因为跳转页面后home页只是隐藏的,并没有被销毁。
为了测试onUnload方法的执行,我们可以在detail.js的onUnload方法中添加输出,代码如下:
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P33_39632.jpg?sign=1739357645-nM4ZLDF29bt7cy9l0E2P8tSxEzdjmuXg-0-a661a8c3b8837234e7e63e6ca2014f42)
重新运行程序进行测试,在页面跳转后,单击左上角的返回按钮,可以看到控制台的输出,如图2.7所示。
![](https://epubservercos.yuewen.com/84397A/23721403209382106/epubprivate/OEBPS/Images/Figure-P33_6476.jpg?sign=1739357645-5D15TB0vkfpAzdV10hjp4Nf7cExlM1TL-0-83d54d9a117d6cec72fa7c34d08852fb)
图2.7 跳转页面输出
从图2.7中可以看到,离开detail页时执行了onUnload方法,离开时再次进入了home页,所以onShow方法也再次执行了。
最后介绍onUnload和onShow的应用场景。比如一个页面有一个计时器,我们想在页面销毁的时候进行关闭,就可以把停止方法写在onUnload方法中,如果写在onHide方法中,就可能会出现返回后计时器中断的现象。onShow方法一般用于页面刷新,比如再次返回该页面,想要刷新数据时,就可以把网络请求写在onShow方法中,保持页面数据为最新。只要灵活掌握这几个生命周期方法,本节的任务就算完成了。