小程序分为应用和页面两个部分:

应用的生命周期。
页面的生命周期。
应用的生命周期对页面生命周期的影响。
路由变化对页面生命周期的影响

1.应用的生命周期:

属性 ------------- 类型 ------------------ 描述------------------ 触发时机
onLaunch Function 生命周期函数–监听小程序初始化 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
onShow Function 生命周期函数–监听小程序显示 当小程序启动,或从后台进入前台显示,会触发 onShow
onHide Function 生命周期函数–监听小程序隐藏 当小程序从前台进入后台,会触发 onHide

前台、后台定义: 当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。

1、用户首次打开小程序,触发 onLaunch(全局只触发一次)。
2、小程序初始化完成后,触发 onShow 方法,监听小程序显示。
3、小程序从前台进入后台,触发 onHide 方法。
4、小程序从后台进入前台显示,触发 onShow 方法。
5、小程序后台运行一定时间,或系统资源占用过高,会被销毁

App({onLaunch: function() { // 启动时做一些初始操作},onShow: function() {//初始后触发做些什么.},onHide: function() {// 离开时做些什么.},onError: function(msg) {//错误时执行console.log(msg)},//通过全局函数 getApp()可以获取到globalData:实例globalData: 'I am global data'
})

小程序提供了全局的 getApp()函数,可以获取到小程序实例。

var appInstance = getApp()
console.log(appInstance.globalData) // I am global data

设置或者修改globalData。这里需要用到全局函数 getApp()

//app.js
App({globalData: {name: '张三',age: 18},onLoad: function(){this.globalData.name = '李四'}
})

如果我们需要在app.js中修改globalData,只需要给对应的变量重新赋值就可以了:

//app.js
App({globalData: {name: '张三',age: 18},onLoad: function(){this.globalData.name = '李四'}
})

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

2.页面生命周期:
属性----------------- 类型----------------------------- 描述
data Object 页面的初始数据
onLoad Function 生命周期函数–监听页面加载
onReady Function 生命周期函数–监听页面初次渲染完成
onShow Function 生命周期函数–监听页面显示
onHide Function 生命周期函数–监听页面隐藏
onUnload Function 生命周期函数–监听页面卸载

1、小程序注册完成后,加载页面,触发 onLoad 方法。
2、页面载入后触发 onShow 方法,显示页面。
3、首次显示页面,会触发 onReady 方法,渲染页面元素和样式,一个页面只会调用一次。
4、当小程序后台运行或跳转到其他页面时,触发 onHide 方法。
5、当小程序有后台进入到前台运行或重新进入页面时,触发 onShow 方法。
6、当使用重定向方法 wx.redirectTo(OBJECT) 或关闭当前页返回上一页 wx.navigateBack(),触发 onUnload。

总结:
1、onLoad: 页面加载。
a、一个页面只会调用一次。
b、参数可以获取wx.navigateTo和wx.redirectTo及<navigator/>中的 query。
2、onShow: 页面显示。
a、每次打开页面都会调用一次。
3、onReady: 页面初次渲染完成。
a、一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。
b、对界面的设置如wx.setNavigationBarTitle请在onReady之后设置。详见生命周期
4、onHide: 页面隐藏。
a、当navigateTo或底部tab切换时调用。
5、onUnload: 页面卸载。
a、当redirectTo或navigateBack的时候调用。

代码:

Page({data: {text: "这是页面数据"},onLoad: function(options) {// 在页面加载时进行一些初始化.},onReady: function() {// 页面初次渲染做些什么.},onShow: function() {// 当页面显示时做些什么},onHide: function() {// 页面隐藏时执行某些操作},onUnload: function() {// 页面关闭时做些什么},onPullDownRefresh: function() {// 监听用户下拉动作},onReachBottom: function() {// 下拉时做些什么当页面到达底部时做些什么},/*在页面的js文件中定义了 onShareAppMessage 函数时,页面可以表示改页面可以转发。可以在函数中设置页面转发的信息。
只有定义了该函数,小程序右上角的菜单中才会有转发按钮
用户点击转发按钮的时候回调用该函数
该函数内需要 return 一个 Object,Object中包含转发的信息(可自定义转发的内容)*/onShareAppMessage: function () {// 用户共享时返回自定义共享数据},// 事件处理程序viewTap: function() {this.setData({text: '为更新视图设置一些数据.'})},
})

触发分享事件后调用的函数:示例

onShareAppMessage: function( options ){var that = this;// 设置菜单中的转发按钮触发转发事件时的转发内容var shareObj = {title: "转发的标题",        // 默认是小程序的名称(可以写slogan等)path: '/pages/share/share',        // 默认是当前页面,必须是以‘/’开头的完整路径imageUrl: '',     //自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径,支持PNG及JPG,不传入 imageUrl 则使用默认截图。显示图片长宽比是 5:4success: function(res){// 转发成功之后的回调if(res.errMsg == 'shareAppMessage:ok'){}},fail: function(){// 转发失败之后的回调if(res.errMsg == 'shareAppMessage:fail cancel'){// 用户取消转发}else if(res.errMsg == 'shareAppMessage:fail'){// 转发失败,其中 detail message 为详细失败信息}},complete: fucntion(){// 转发结束之后的回调(转发成不成功都会执行)}};// 来自页面内的按钮的转发if( options.from == 'button' ){var eData = options.target.dataset;console.log( eData.name );     // shareBtn// 此处可以修改 shareObj 中的内容shareObj.path = '/pages/btnname/btnname?btn_name='+eData.name;}// 返回shareObjreturn shareObj;
}

3.应用生命周期影响页面生命周期

1、小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。
2、当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。
3、当小程序从后台进入到前台,先执行应用onShow方法再执行页面onShow方法。

4.路由变化对页面生命周期的影响
4.1、在小程序中所有页面的路由全部由框架进行管理,框架以栈的形式维护当前的所有页面,当发生路由切换的时候,页面栈的表现如下:

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

4.3、Tab 切换对应的生命周期(以 A、B 页面为 Tabbar 页面,C 是从 A 页面打开的页面,D 页面是从 C 页面打开的页面为例)
5.通过实例我们一起理解一下官方的小程序页面的生命周期:

总结bug经验:微信小程序别用缓存,有时候会莫名其妙的消失,建议用globalData解决问题。

微信小程序开发之生命周期详解?相关推荐

  1. 微信小程序开发之生命周期

    开发小程序过程中会涉及到小程序的生命周期,和其他app开发一样,小程序也有生命周期. 1:页面的生命周期 在初始页面:index.js中增加如图1所示代码 点击"编译"后,运行这个 ...

  2. 微信小程序开发---页面生命周期

    微信小程序开发---生命周期 何为生命周期 小程序全局[app.js]---生命周期 小程序页面[pages/pagename.js]---生命周期 何为生命周期 生命周期是指一个事物从创建到销毁的一 ...

  3. 【微信小程序开发】生命周期与生命周期函数

    目录 一.生命周期 二.生命周期函数 三.总结 一.生命周期 (1)概念 生命周期(Life Cycle)是指一个对象从创建-->运行-->销毁的整个阶段 小程序的生命周期 小程序启动,表 ...

  4. mpvue还在维护吗_mpvue 微信小程序开发之生命周期

    最近在开发小程序,尝试性地使用了一下 mpvue 是一个使用 Vue.js 开发小程序的前端框架.框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compile ...

  5. 学习(微信小程序 开发入门及案例详解 --李骏,边思编著)

    第一章 初识小程序 1.小程序不仅在商业上具备很大潜力,同时在技术上解决了一套代码多端运行和动态发版的两大痛点,用户在微信中扫一扫或搜一下即可打开具备原生体验的应用,这给开发者带来了很大的想象空间 2 ...

  6. 小程序开发.uniapp.生命周期

    小程序开发.uniapp.生命周期 [内容介绍]: uniapp中生命周期相关内容 相关文章推荐: 标题 链接 <小程序开发.概述与环境搭建> https://blog.csdn.net/ ...

  7. 小程序setdata优化_微信小程序 setData的使用方法详解

    微信小程序 setData的使用方法详解 微信小程序 setData的使用方法详解 最近在使用微信小程序的setData时,遇到了以下问题.如下: 官网文档在使用setData()设置数组对象的某个元 ...

  8. 微信小程token_微信小程序url与token设置详解

    微信小程序url与token设置详解 新浪云应用sae的代码里创建一个weixin.php文件,写入以下代码 isValid(); class wechatAPI { public function ...

  9. 微信小程序一键置顶操作详解:

    微信小程序一键置顶操作详解: 第一种方式:采用scroll-view滚动视图实现 第二种方式,直接用view实现 第一种方式:采用scroll-view滚动视图实现 下面是代码简介: wxml文件代码 ...

最新文章

  1. GeoIP的使用 - PHP版
  2. 《人工智能与工业融合发展研究报告》: AI入局推动工业产业6大趋势变化(附PPT)...
  3. SpringSecruity整合Oauth2 详解(一)
  4. mysql的SQL_NO_CACHE(在查询时不使用缓存)和sql_cache用法
  5. 王之泰201771010131《面向对象程序设计(java)》第九周学习总结
  6. gradle引入依赖:_Gradle入门:依赖管理
  7. [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]
  8. STM32之JScope调试
  9. Eclipse如何关闭在RUN/DEBUG时弹出窗口?
  10. 监控某个dll被修改_浅谈动力环境监控系统技术标准
  11. Java连接各种数据库
  12. (翻译)从底层了解ASP.NET体系结构 [转]
  13. Ps如何制作动态图片
  14. B端产品运营基本工作内容
  15. 在COMSOL中固体力学模块中添加 力矩 扭矩
  16. 轻量锁volatile
  17. OSChina 周日乱弹 —— 我们今天不上班!
  18. 计算机网络面试题 43问汇总,面试必问
  19. myeclipse代码或JSP页面改动之后,并没有生效问题
  20. 如何显示密件抄送人员地址_如何在Outlook中使用规则自动密件抄送电子邮件

热门文章

  1. Android Studio中快速接入百度OCR遇到的问题解决方法
  2. 最新版的Chrome其实不太占内存了,实测如下
  3. 新一轮融资惹外界热议 闪送能否担当即时配送领头羊重任?
  4. 数据可视化之旅(一)数据可视化基本流程及基本原理
  5. 中控身份证打卡器ID100接口调用中遇到的一些坑
  6. c++ mfc无法转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)错误处理
  7. (附源码)计算机毕业设计ssm成都美食交流平台
  8. vue中使用js控制button的disabled属性
  9. Layui上传获取数据为空 null
  10. 中国各个城市OSM地图数据