小程序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却先执行的解决办法

微信小程序中Callback回调函数

微信小程序中Callback回调函数

小程序-首页需要等待app.js—onLaunch中某请求执行完成

生命周期函数

微信小程序之接口验证问题与处理onLaunch与onload异步同步问题