小程序onLaunch和onLoad执行顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序onLaunch和onLoad执行顺序相关的知识,希望对你有一定的参考价值。
参考技术A小程序初始化 :
问题 : 在 onLaunch 里请求去获取是否有权限,等待返回值的时候, Page里的 onLoad 事件就已经执行.
目标: onLaunch 请求完 -> 再执行Page的 onLoad 方法
解决 : 定义一个回调函数
这样就能满足需求: 在 onLaunch 执行完毕后,再执行 onload 里的函数方法.
小程序笔记
小程序生命周期(onLaunch、onShow、onHide、onReady、onLoad、onUnloa)
(1)onlaunch:当小程序初始化完成时,会触发 onLaunch(全局只触发一次)(app.js);
(2)onLoad: 页面加载
小程序注册完成后,加载页面,触发onLoad方法。一个页面只会调用一次,可以在 onLoad 中获取打开当前页面所调用的 query 参数(页面js)。
(3)onShow: 页面显示
页面载入后触发onShow方法,显示页面。每次打开页面都会调用一次(比如当小程序有后台进入到前台运行或重新进入页面时)。
(4)onReady: 首次显示页面,页面初次渲染完成,会触发onReady方法,渲染页面元素和样式,一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。对界面的设置如wx.setNavigationBarTitle请在onReady之后设置。
(5)onHide: 页面隐藏
当navigateTo或底部tab切换时调用。
(6)onUnload: 页面卸载
当使用重定向方法wx.redirectTo(OBJECT)或关闭当前页返回上一页wx.navigateBack的时候调用。
基本上可以说执行顺序为onLaunch–onLoad–onShow–onReady–onHide.
虽然说onLaunch在onLoad之前执行,但是在onLaunch里请求获取是否有权限,等待返回值的时候Page里的onLoad事件就已经执行了。
解决办法:
在APP里面onLanch中的网络请求中设置判断
if (this.userInfoReadyCallback)
this.userInfoReadyCallback(res)
在page的onLoad中设置一个回调
app.userInfoReadyCallback = res =>
if (res != '')
console.log("app.globalData.userInfo")
分享的使用:
/**
* 用户点击右上角分享
*/
onShareAppMessage: function(res)
if (res.from === 'button')
// 来自页面内转发按钮
return
title: "这个小程序真好",
path: 'pages/start/start?commentUserId=' + app.globalData.commentUserId
,
onShareAppMessage: function( options )
var that = this;
// 设置菜单中的转发按钮触发转发事件时的转发内容
var shareObj =
title: "转发的标题", // 默认是小程序的名称(可以写slogan等)
path: '/pages/share/share', // 默认是当前页面,必须是以‘/’开头的完整路径
imageUrl: '', //自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径,支持PNG及JPG,不传入 imageUrl 则使用默认截图。显示图片长宽比是 5:4
success: 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;
// 返回shareObj
return shareObj;
以上是关于小程序onLaunch和onLoad执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
小程序onLaunch异步,首页onLoad却先执行的解决办法