小程序注册
- 每个小程序都需要在 app.js 中调用 App 方法注册小程序实例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。
- 整个小程序只有一个 App 实例,是全部页面共享的。
注意:App() 必须在 app.js 中调用,必须调用且只能调用一次。不然会出现无法预期的后果。
App({
onLaunch (options) {
// Do something initial when launch.
},
onShow (options) {
// Do something when show.
},
onHide () {
// Do something when hide.
},
onError (msg) {
console.log(msg)
},
globalData: 'I am global data'
})
App实例中参数
类型: Object
示例:
App({
onLaunch (options) { // 注意该钩子只能在根目录下app.json调用,且全局只触发一次
},
onShow (options) {
console.log(wx.getLaunchOptionsSync());
},
onHide () {
},
onError () {
},
globalData: {
userInfo: null
}
})
生命周期钩子
属性 | 类型 | 必填 | 说明 | 被调用时传入的参数 | 最低版本 |
---|---|---|---|---|---|
onLaunch | function | 否 | 生命周期回调——监听小程序初始化。 | options | |
onShow | function | 否 | 生命周期回调——监听小程序启动或切前台。 | options | |
onHide | function | 否 | 生命周期回调——监听小程序切后台。 |
钩子中的参数:
01.在onLanuch及onShow钩子调用成功后,函数会接受一个参数options
02.实际上该参数即wx.getLaunchOptionsSync()获取的返回值一致
(类型:object)
属性 | 类型 | 说明 |
---|---|---|
path | string | 小程序切前台的路径 (代码包路径) |
scene | number | 小程序切前台的场景值 |
query | Object | 小程序切前台的 query 参数 |
shareTicket | string | shareTicket,详见获取更多转发信息 |
referrerInfo | Object | 来源信息。从另一个小程序、公众号或 App 进入小程序时返回。否则返回 {}。(下面说明) |
referrerInfo属性:
属性 | 类型 | 说明 |
---|---|---|
appId | string | 来源小程序、公众号或 App 的 appId |
extraData | Object | 来源小程序传过来的数据,scene=1037或1038时支持 |
返回有效 referrerInfo 的场景
场景值 | 场景 | appId含义 |
---|---|---|
1020 | 公众号 profile 页相关小程序列表 | 来源公众号 |
1035 | 公众号自定义菜单 | 来源公众号 |
1036 | App 分享消息卡片 | 来源App |
1037 | 小程序打开小程序 | 来源小程序 |
1038 | 从另一个小程序返回 | 来源小程序 |
1043 | 公众号模板消息 | 来源公众号 |
注意
部分版本在无referrerInfo的时候会返回 undefined,建议使用 options.referrerInfo && options.referrerInfo.appId 进行判断。
其他类型钩子
属性 | 类型 | 说明 | 版本 |
---|---|---|---|
onError | function | 错误监听函数。 | |
onPageNotFound | function | 页面不存在监听函数。 | 1.9.90 |
onUnhandledRejection | function | 未处理的 Promise 拒绝事件监听函数。 | 2.10.0 |
onThemeChange | function | 监听系统主题变化 | 2.11.0 |
其他 | any | 开发者可以添加任意的函数或数据变量到 Object 参数中,用 this 可以访问 |
实测: (版本 2.13.2)
- onError钩子无法捕获错误信息
- onPageNotFound当跳转到一个不存在页面时无法触发该钩子
- onUnhandledRejection钩子:
(该钩子函数接收一个参数)
属性 | 类型 | 说明 |
---|---|---|
reason | string | 拒绝原因,一般是一个 Error 对象 |
promise | Promise. 被拒绝的 Promise 对象 |
示例:
App({
onlaunch () {
console.log(wx.getLaunchOptionsSync())
},
onUnhandledRejection (options) {
//由于参数中属性promise是一个Promise(状态为reject)对象
options.promise.catch(err => {
console.log(err)
})
},
globalData: {
userInfo: null
}
})
打印示例:{errMsg: "navigateTo:fail page "pages/aa/index" is not found"}
注意 安卓平台暂时不支持该事件 所有的 unhandledRejection 都可以被这一监听捕获,但只有 Error 类型的才会在小程序后台触发报警。
- onThemeChange
前置:
在全局app.json下配置"darkmode": true
该钩子函数接收一个参数:options
属性 | 类型 | 说明 |
---|---|---|
theme | string | 系统当前的主题,取值为light或dark |
函数式调用钩子
- onLaunch钩子
函数式: App.onLaunch - onAppShow钩子 或 onShow钩子
函数式: wx.onAppShow() 或 wx.onShow() - onAppHide钩子
函数式: wx.onAppHide() 或 wx.onHide()
·············
注意:无论是钩子形式还是函数式调用,能接收的参数都是一致的。