赞
踩
- 关于小程序的退出:当用户点击小程序左上角关闭,或者按设备Home键离开微信,小程序并没有直接销毁,而是触发onHide方法进入了后台,短时间内当再次进入微信或者再次打开小程序,小程序会从后台状态进入前台,此为“热启动”。注意当小程序进入后台状态一定时间后,或者系统资源占用过高,微信会真正销毁小程序。用户第一次进入小程序或者在小程序销毁后再次进入小程序是为“冷启动”。
- 小程序的冷启动:小程序在冷启动时会依次触发onLaunch—>onShow
- 小程序的热启动:小程序在热启动时会触发onShow
- 小程序关闭时:即小程序从前台进入后台时触发onHide
- 小程序销毁时:即小程序从前台进入后台时触发onUnload
- //index.js
- Page({
- data: {
- text: "This is page data."
- },
- onLoad: function(options) {
- // 页面创建时执行
- },
- onShow: function() {
- // 页面出现在前台时执行
- },
- onReady: function() {
- // 页面首次渲染完毕时执行
- },
- onHide: function() {
- // 页面从前台变为后台时执行
- },
- onUnload: function() {
- // 页面销毁时执行
- },
- onPullDownRefresh: function() {
- // 触发下拉刷新时执行
- },
- onReachBottom: function() {
- // 页面触底时执行
- },
- onShareAppMessage: function () {
- // 页面被用户分享时执行
- },
- onPageScroll: function() {
- // 页面滚动时执行
- },
- onResize: function() {
- // 页面尺寸变化时执行
- },
- onTabItemTap(item) {
- // tab 点击时执行
- console.log(item.index)
- console.log(item.pagePath)
- console.log(item.text)
- },
- // 事件响应函数
- viewTap: function() {
- this.setData({
- text: 'Set some data for updating view.'
- }, function() {
- // this is setData callback
- })
- },
- // 自由数据
- customData: {
- hi: 'MINA'
- }
- })
组件内的生命周期与方法
- Component({
- data: {
- text: "This is page data."
- },
- methods: {
- onLoad: function(options) {
- // 页面创建时执行
- },
- onPullDownRefresh: function() {
- // 下拉刷新时执行
- },
- // 事件响应函数
- viewTap: function() {
- // ...
- }
- }
- })
- Component({
- lifetimes: {
- created: function() {
- //在组件实例刚刚被创建时执行
- },
- attached: function() {
- //在组件实例进入页面节点树时执行
- },
- ready: function() {
- // 在组件在视图层布局完成后执行
- },
- moved: function() {
- // 在组件实例被移动到节点树另一个位置时执行
- },
- detached: function() {
- // 在组件实例被从页面节点树移除时执行
- },
- error: function() {
- // 每当组件方法抛出错误时执行
- },
- },
- // 以下是旧式的定义方式,可以保持对 <2.2.3 版本基础库的兼容
- attached: function() {
- // 在组件实例进入页面节点树时执行
- },
- detached: function() {
- // 在组件实例被从页面节点树移除时执行
- },
- // ...
- })
- Component({
- pageLifetimes: {
- show: function() {
- // 页面被展示
- },
- hide: function() {
- // 页面被隐藏
- },
- resize: function(size) {
- // 页面尺寸变化
- }
- }
- })
App() 必须在 app.js
中调用,必须调用且只能调用一次。不然会出现无法预期的后果。
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
onLaunch | function | 否 | 生命周期回调——监听小程序初始化。 | ||
onShow | function | 否 | 生命周期回调——监听小程序启动或切前台。 | ||
onHide | function | 否 | 生命周期回调——监听小程序切后台。 | ||
onError | function | 否 | 错误监听函数。 | ||
onPageNotFound | function | 否 | 页面不存在监听函数。 | 1.9.90 | |
onUnhandledRejection | function | 否 | 未处理的 Promise 拒绝事件监听函数。 | 2.10.0 | |
onThemeChange | function | 否 | 监听系统主题变化 | 2.11.0 | |
其他 | any | 否 | 开发者可以添加任意的函数或数据变量到 Object 参数中,用 this 可以访问 |
(1)小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。
(2)当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。
(3)当小程序从后台进入到前台,先执行应用onShow方法再执行页面onShow方法。
在小程序中所有页面的路由全部由框架进行管理。
框架以栈的形式维护了当前的所有页面。 当发生路由切换的时候,页面栈的表现如下:
路由方式 | 页面栈表现 |
---|---|
初始化 | 新页面入栈 |
打开新页面 | 新页面入栈 |
页面重定向 | 当前页面出栈,新页面入栈 |
页面返回 | 页面不断出栈,直到目标返回页 |
Tab 切换 | 页面全部出栈,只留下新的 Tab 页面 |
重加载 | 页面全部出栈,只留下新的页面 |
开发者可以使用 getCurrentPages()
函数获取当前页面栈。
对于路由的触发方式以及页面生命周期函数如下:
路由方式 | 触发时机 | 路由前页面 | 路由后页面 |
---|---|---|---|
初始化 | 小程序打开的第一个页面 | onLoad, onShow | |
打开新页面 | 调用 API wx.navigateTo 使用组件 <navigator open-type="navigateTo"/> | onHide | onLoad, onShow |
页面重定向 | 调用 API wx.redirectTo 使用组件 <navigator open-type="redirectTo"/> | onUnload | onLoad, onShow |
页面返回 | 调用 API wx.navigateBack 使用组件<navigator open-type="navigateBack"> 用户按左上角返回按钮 | onUnload | onShow |
Tab 切换 | 调用 API wx.switchTab 使用组件 <navigator open-type="switchTab"/> 用户切换 Tab | 各种情况请参考下表 | |
重启动 | 调用 API wx.reLaunch 使用组件 <navigator open-type="reLaunch"/> | onUnload | onLoad, onShow |
Tab 切换对应的生命周期(以 A、B 页面为 Tabbar 页面,C 是从 A 页面打开的页面,D 页面是从 C 页面打开的页面为例):
当前页面 | 路由后页面 | 触发的生命周期(按顺序) |
---|---|---|
A | A | Nothing happend |
A | B | A.onHide(), B.onLoad(), B.onShow() |
A | B(再次打开) | A.onHide(), B.onShow() |
C | A | C.onUnload(), A.onShow() |
C | B | C.onUnload(), B.onLoad(), B.onShow() |
D | B | D.onUnload(), C.onUnload(), B.onLoad(), B.onShow() |
D(从转发进入) | A | D.onUnload(), A.onLoad(), A.onShow() |
D(从转发进入) | B | D.onUnload(), B.onLoad(), B.onShow() |
Tips:
navigateTo
, redirectTo
只能打开非 tabBar 页面。switchTab
只能打开 tabBar 页面。reLaunch
可以打开任意页面。onLoad
中获取。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。