小程序的应用生命周期函数主要有:
onLaunch(options),onShow(options),onHide() 在App({})中,onLaunch(options)在小程序启动时执行,全局只会触发一次。onShow(options)小程序前台运行时执行,可以执行多次,options.scene可以获取用户进入小程序的场景值。onHide()小程序后台运行时执行,可执行多次。执行顺序:onLaunch->onShow-> onHide()->onShow-> onHide()->.....
小程序的页面生命周期函数主要有:
onLoad(options),onShow(),onReady(),onHide(),onUnload()
Page({
// 页面加载时触发,只会触发1次
onLoad: function () {
console.log('Page-onLoad-当前页面被加载了...');
},
// 当前页面初次渲染完毕时触发,只会触发1次
onReady: function () {
console.log('Page-onReady-当前页面初次渲染完毕了...');
},
// 页面显示时触发(如返回、tabBar切换、前台运行)
onShow: function () {
console.log('Page-onShow-当前页面显示了...');
},
// 页面隐藏时触发(跳转、tabBar切换、后台运行)
onHide: function () {
console.log('Page-onHide-当前页面不见了...');
},
// 页面卸载
onUnload: function () {
console.log('Page-onUnload-当前页面销毁了...');
},
})
执行顺序:onLoad()->onShow()->onReady()->onHide()->nShow()->onHide()->onUnload()
页面跳转究竟怎么执行生命周期函数???此处有点坑~
页面A->页面B->页面C->页面D->页面E->页面F->页面G->页面H->页面I->页面H->页面J 注意页面栈最多可以累加10个,不清空就不能再跳转,在A跳到B时,首先A执行onHide(),B执行onLoad()->onShow()->onReady(),B跳到C时,首先B执行onHide(),C执行onLoad()->onShow()->onReady(),其余同理。但是,当返回上一页时,当前页面会执行onUnload()即出页面栈,例如页面J回到页面D,那么JHIGFE都将执行onUnload(),页面D将执行onShow() 总结出页面栈就会执行onUnload(),被返回则执行onShow(),被导航到本页面则执行onLoad()->onShow()->onReady(),注意:页面A-》页面B-》页面A-》页面B执行跟前面一样,即使页面A在页面栈,B-》A的话依然A要执行onLoad()->onShow()->onReady(),但是B返回A的话,A只需要执行onShow()
补充小程序跳转的6种方式
<navigator url></navigator>:效果等同于wx.navigateTo,只是它是标签- wx.navigateTo:累加栈,不会主动出栈,累计满10则不能再跳(常用)
- wx.navigateBack:返回上一页面(页面不断出栈),通过delta: 数字,决定几页出栈
- wx.redirectTo:关闭当前页面,跳转到应用内的某个页面(当前页面出栈,新页面入栈),常用于支付跳转
- wx.switchTab:跳转到 tabBar 页面,同时关闭其他非 tabBar 页面(非Tab页面全部出栈,只留下新的 Tab 页面),tabbar之间的跳转,未入栈则会执行onLoad()->onShow()->onReady(),已在栈中则执行onShow()
- wx.reLaunch:关闭所有页面,打开到应用内的某个页面(页面全部出栈,只留下新的页面)