生命周期是指一个小程序从创建到销毁的一系列过程

在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面

先来看一张小程序项目结构

从上图可以看出,根目录下面有包含了app.js,app.wxss,app.json三个文件

这是小程序的全局文件,app.js是小程序逻辑 ,app.json是小程序公共设置,app.wxss是小程序公共样式表

在app.js文件中 , 定义了一些生命周期方法 , onLaunch,onShow,onHide,onError,以及任意开发者添加的函数或者数据(通过this可以访问)

以下是各个生命周期方法作用和描述

onLaunch 生命周期函数--监听小程序初始化 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)

onShow 生命周期函数--监听小程序显示 当小程序启动,或从后台进入前台显示,会触发 onShow

onHide 生命周期函数--监听小程序隐藏 当小程序从前台进入后台,会触发 onHide

onError 错误监听函数 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息

其他 Any 开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问

我们在app.js文件中定义以下方法 ,并打印出来

App({
onLaunch: function (options) {
console.log("app.js ---onLaunch---" + JSON.stringify(options));
},
onShow:function(){
console.log("app.js ---onShow---");
},
onHide:function(){
console.log("app.js ---onHide---");
},
onError: function (msg){
console.log("app.js ---onError---" + msg);
},
globalData: {
userInfo: null
}
})

这是我们打开一个小程序打印出来的一些方法

可以看出, 打开程序依次执行了app.js下面onLaunch和onShow方法,以及page页面中的onLoad,onShow和onReady方法

其中 , onLaunch, onShow 方法会返回一个参数对象, 里面包含了三个参数 , path,query和scene ,path是打开小程序的路径

query是打开小程序页面url的参数,scene是打开小程序的场景值

更多场景值可以查看
https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-service/scene.html

小程序切换到后台会执行以下2个方法

返回小程序前台

在page页面中定义的生命周期方法

onLoad 生命周期函数--监听页面加载

onReady 生命周期函数--监听页面初次渲染完成

onShow 生命周期函数--监听页面显示

onHide 生命周期函数--监听页面隐藏

onUnload 生命周期函数--监听页面卸载

Page({
onLoad: function (options) {
console.log("page ---onLoad---");
},
onReady: function () {
console.log("page ---onReady---");
},
onShow: function () {
console.log("page ---onShow---");
},
onHide: function () {
console.log("page ---onHide---");
},
onUnload: function () {
console.log("page ---onUnload---");
}
})

其中,打开小程序后会依次执行onLoad,onReady和onShow方法

前后台切换会分别执行onHide和onShow方法,

当小程序页面销毁时会执行 onUnload方法

例如,我们在details.js中定义onUnload方法

onUnload: function () {
console.log("details.js --onUnload")
},

当我们从首页打开一个新页面details.wxml,然后再关闭着这个页面

从上图可以看到页面执行了onUnload方法

另外, 小程序为我们提供了全局数据管理 ,在page页面中通过getApp()方法获取app.js实例

例如:

我们在app.js通过定义一个globalData数据对象

App({
globalData: {
userInfo: null
}
}) // other.js
var appInstance = getApp()
console.log(appInstance.globalData)

注意:
App() 必须在 app.js 中注册,且不能注册多个。
不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例。
不要在 onLaunch 的时候调用 getCurrentPages(),此时 page 还没有生成。
通过 getApp() 获取实例之后,不要私自调用生命周期函数。

.

最新文章

  1. PHP搭建大文件切割分块上传功能
  2. Canvas讲解
  3. va_copy
  4. ArrayList和LinkedList的区别
  5. tableView和scrollView滚动起冲突
  6. 《FLASH CC 2015 CANVAS 中文教程》——2、基本的交互(点击、触摸)事件
  7. android编程之ExpandableListView使用总结
  8. hdu 2824 The Euler function(欧拉函数)
  9. Python学习笔记三,数组list和tuple
  10. SharePoint webpart中悬浮窗口的webconfig路径
  11. Android实现限制EditText输入文字的数量
  12. HTML5 前端框架和开发工具【下篇】
  13. 嵌入式系统基础知识(一): 系统结构和嵌入式Linux
  14. nginx中支持.htaccess并禁止php在特定目录无法运行
  15. JS获得一个对象的所有属性和方法
  16. C++内存分区
  17. Java——继承的运行顺序
  18. 《Java大学教程》—第6章 类和对象
  19. IDEA抛出No bean named 'cacheManager' available解决方法
  20. 更新快排中的partition

热门文章

  1. 【Python学习之三】流程控制语句
  2. 转载:Python Web开发最难懂的WSGI协议,到底包含哪些内容?
  3. [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)
  4. postman上传文件对参数的contentType类型设置方式
  5. 滚动条mCustomScrollbar自定义
  6. [转帖]熬夜变傻有科学依据,人类睡觉时会被“洗脑”,科学家首次拍下全程 | Science
  7. listWdiget控件
  8. 『Go基础』第6节 注释
  9. html2canvas以及domtoimage的使用踩坑总结
  10. git clone一个仓库下的单个文件【记录】