微信小程序 全局变量异步函数_微信小程序【生命周期】

小程序分为应用、页面和组件三个部分,所以小程序的生命周期涉及以下

  1. 应用的生命周期
  2. 页面的生命周期
  3. 组件的声明周期
  4. 应用的生命周期对页面生命周期的影响
87605cf4b93579b29586e9b9f9ebb7b2.png

应用的生命周期

App() 函数用来注册一个小程序。接受一个 Object 参数,其指定小程序的生命周期回调等。App() 必须在 app.js 中调用,必须调用且只能调用一次。

App({

onLaunch: function(options) {

// 监听小程序初始化。小程序初始化完成时(全局只触发一次)

},

onShow: function(options) {

// 监听小程序显示。小程序启动,或从后台进入前台显示时

},

onHide: function() {

// 监听小程序隐藏。小程序从前台进入后台时。

},

onError: function(msg) {

console.log(msg) // 错误监听函数。小程序发生脚本错误,或者 api 调用失败时触发,会带上错误信息

},

onPageNotFound: function(res) {

// 页面不存在监听函数。小程序要打开的页面不存在时触发,会带上页面信息回调该函数

},

globalData: 'I am global data' //全局变量

})

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

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

全局的 getApp() 函数可以用来获取到小程序 App 实例。

写法:var app = getApp()

注意:不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例;通过 getApp() 获取实例之后,不要私自调用生命周期函数

页面的生命周期

Page(Object) 函数用来注册一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。

//index.js

Page({

data: {

// 页面的初始数据

text: "This is page data."

},

onLoad: function(options) {

// 生命周期回调—监听页面加载

},

onReady: function() {

// 生命周期回调—监听页面初次渲染完成

},

onShow: function() {

// 生命周期回调—监听页面显示

},

onHide: function() {

// 生命周期回调—监听页面隐藏

},

onUnload: function() {

// 生命周期回调—监听页面卸载

},

onPullDownRefresh: function() {

// 监听用户下拉动作

},

onReachBottom: function() {

// 页面上拉触底事件的处理函数

},

onShareAppMessage: function () {

// 用户点击右上角转发

},

onPageScroll: function() {

// 页面滚动触发事件的处理函数

},

onResize: function() {

// 页面尺寸改变时触发

},

onTabItemTap(item) {

// 当前是 tab 页时,点击 tab 时触发

console.log(item.index)

console.log(item.pagePath)

console.log(item.text)

},

// 任意的函数,在页面的函数中用 this 可以访问

viewTap: function() {

this.setData({

text: 'Set some data for updating view.'

}, function() {

// this is setData callback

})

},

// 任意数据,在页面的函数中用 this 可以访问

customData: {

hi: 'MINA'

}

})

页面生命周期图

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

总结:

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

组件的生命周期

组件的生命周期,指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。

其中,最重要的生命周期是 created attached detached ,包含一个组件实例生命流程的最主要时间点。

  1. created 组件实例化,但节点树还未导入,因此这时不能用setData
  2. attached 组件初始化完毕,节点树完成,可以用setData渲染节点,但无法操作节点
  3. ready 组件布局完成,这时可以获取节点信息,也可以操作节点
  4. moved 组件实例被移动到树的另一个位置
  5. detached 组件实例从节点树中移

组件所在页面的生命周期, 指的是那些并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理的生命周期,在 pageLifetimes 定义段中定义。

  1. show 组件所在的页面被展示时执行
  2. hide 组件所在的页面被隐藏时执行
  3. resize 组件所在的页面尺寸变化时执行

应用的生命周期对页面生命周期的影响

b69acccfc135d51de09e4ddbe9bd3f33.png

小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。

当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。

当小程序从后台进入到前台,先执行应用onShow方法再执行页面onShow方法。

423f528a574767d49eb99abe826a4b66.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle agile 性能,Oracle Agile PLM安全漏洞(CVE-2016-3554)

Oracle Agile PLM安全漏洞(CVE-2016-3554)发布日期:2016-07-21更新日期:2016-07-25受影响系统:Oracle Supply Chain Products Suite 9.3.5Oracle Supply Chain Products Suite 9.3.4描述:CVE(CAN) ID: CVE-2016-3554Oracle Agile产…

java 挥发注解_Java的挥发性修饰符

java 挥发注解不久前,我写了一个Java servlet过滤器,该过滤器在其init函数中加载配置(基于web.xml的参数)。 筛选器的配置缓存在私有字段中。 我在字段上设置了volatile修饰符。 后来,当我检查Sonar公司以查看是否在代…

python 线程锁_python多线程编程(3): 使用互斥锁同步线程

问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系。现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1。很容易写出这样的代码&am…

Comnnect oracle,RAC监听日志与CRS日志

RAC监听日志:tnsname.oraCRS日志:位置:Oracle集群涉及的日志主要位于“$ORA_CRS_HOME/log”和“$ORACLE_HOME/log”目录中目录结构:tree -d $ORA_CRS_HOME/logtree -d $ORACLE_HOME/log禁止Clusterware在系统重启后自动启动&#…

python全栈开发百度云_价值2400 2016年11月全栈开发Flask Python Web 网站编程

01-计算机基础常识.mp4 02-Python语言概览、安装与运行.mp4 03-Python 变量、数据类型及存储.mp4 04-Python 常用数据类型概览.mp4 05-数值与字符串.mp4 06-列表list.mp4 07-字典表dict 与元组 tuple.mp4 08-文件与类型汇总.mp4 09-语句、表达式与if分支.mp4 10-循环语句.mp4 1…

Java / Spring:如何快速生成整个数据库CRUD REST API

随着时间的流逝,Spring框架已成为Java中使用最广泛的Web开发框架之一,这一点已变得显而易见。 在接下来的十年之际,Spring最受欢迎的模块Spring Boot刚刚进行了重大更新。 新的Spring Boot版本“ 2.2.0”和年份“ 2020”几乎完美匹配。 因此…

如何在虚拟linux环境运行python_Conda(Python)虚拟环境不能从Windows移植到Linux

在我的Windows 10计算机上,我使用以下命令创建了一个虚拟环境:>conda env export > environment.yml 我尝试在Windows系统上使用yml文件重新创建虚拟环境,效果很好。然后我转学了环境.yml在我的Linux机器(Ubuntu16.04.1&…

oracle两个表合并 sql,如何创建从两个表(Oracle DBMS)生成“合并”数据集的Select SQL语句?...

我最后做了两个步骤:第一步填充事件表1中的数据,第二步合并目标(第一步中的数据集)和另一个源之间的数据。请原谅我,因为法律原因,我不得不混淆表名并省略下面代码中的一些列。下面是SQL:INSERT INTO EVENTS_TARGET (VEHICLE_ID,EVENT_TYPE_ID,CLIENT_ID,EVENT_DATE,CREATED_DA…

php毕业设计遇到的问题,常见问题_php毕业设计_php课程设计_php大作业_原创作品下载网...

一、我们怎么交易?答:本站采用在线支付的方式,每个产品页面都有一个付款按钮,亲在线付款后页面会显示一个“订单号”,根据这个订单号在本站的下载页面(见顶部菜单)下载相应程序,注意,亲要在30分…

git maven 发布_Maven Git发布

git maven 发布在开始这篇文章之前,我需要指出我在去年才开始认真地与Git合作 。 不幸的是,我从事的许多项目仍在使用SVN或CVS,但现在我终于开始使用Git了 。 在过去的几年中,我使用Maven Release Plugin完成了许多软件发行。 我…

python界面长什么样图片_python界面是什么样的

安装完Python,在命令行输入“python”之后,如果成功,会得到类似于下面的窗口:可以看到,结尾有3个>符号(>>>)。>>>被叫做Python命令提示符(prompt)&…

php static 访问,使用PHP访问Static方法的最佳方法

这是我的课堂财产private $my_paths array(imagemagick > E:\Server\_ImageOptimize\ImageMagick,pngcrush > E:\Server\_ImageOptimize\pngCrush\pngcrush.exe,jpegtran > E:\Server\_ImageOptimize\jpegtran\jpegtran.exe,gifsicle > E:\Server\_ImageOptimize\…

python表格控件_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...

PyQt5表格控件QTableView简介 在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的数据模型来显示内容,通过setModel来绑定数据…

Java:Speedment 3.2的发布–现在启用轻量级数据库微服务

几种传统的ORM不能完全遵循Java模块封装(JPMS)。 这通常意味着在部署微服务时会使用很多不必要的文件和类。 最新的主要版本3.2的开源 Speedance通过引入模块系统支持来解决此问题,该模块支持对云应用程序进行有效部署并提供更严格的API。 …

Linux文件系统为,浅析Linux文件系统

原标题:浅析Linux文件系统一、文件系统层次分析由上而下主要分为用户层、VFS层、文件系统层、缓存层、块设备层、磁盘驱动层、磁盘物理层用户层最上面用户层就是我们日常使用的各种程序,需要的接口主要是文件的创建、删除、打开、关闭、写、读等。VFS层我…

求解出n以内所有能被5整除的正整数的乘积_所有最常见最经典的算法题都在这里了...

1、一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到…

怎样使set现程变得安全_使不安全变得更加安全

怎样使set现程变得安全总览 如果直接使用Unsafe,则可能会导致JVM崩溃。 当您访问尚未映射的内存页面并且在Unix上的结果是SIGSEG(如果访问页面0)或SIGBUS(如果您访问另一个未映射的页面)时,会发生这种情况。…

linux lvm 系统快照,系统运维|在 LVM中 录制逻辑卷快照并恢复(第三部分)

LVM快照是以空间换时间时间的方式制作的lvm卷副本。它只在lvm中工作,并只在源逻辑卷发生改变时占用快照卷的空间。如果源卷的变化达到1GB这么大,快照卷同样也会产生这样大的改变。因而,对于空间有效利用的最佳途径,就是总是进行小…

Spring Annotations我从没有机会使用第2部分:@ConfigurationProperties

几天前,我在检查其他内容时不小心偶然发现了Spring Boot项目中的Spring注释。 我们都知道如何将带有“ Value”的属性值绑定到类,并且我们都知道如果要绑定多个属性,这可能会很麻烦。 Spring Boot可以为您提供帮助。 您可以使用“ Configura…

python语言变量随时声明_2. Go语言五种变量创建的方法

对于只有 Python 语言经验的朋友,也许会不太理解声明这个词,在 Python 中直接拿来就用,也不用声明类型啥的。 Go 语言是静态类型语言,由于编译时,编译器会检查变量的类型,所以要求所有的变量都要有明确的类…