JavaScript
引擎为小程序提供开发者 JavaScript 代码的运行环境以及TMF小程序的特有功能。JavaScript
的基础上,我们增加了一些功能,以方便小程序的开发:JavaScript
在 web 中一些能力都无法使用,如 window
,document
等。App()
函数用来注册一个小程序。接受一个Object
参数,其指定小程序的生命周期回调等。app.js
中调用,必须调用且只能调用一次。不然会出现无法预期的后果。属性 | 类型 | 描述 | 触发时机 |
function | 生命周期回调—监听小程序初始化 | 小程序初始化完成时(全局只触发一次) | |
function | 生命周期回调—监听小程序初显示 | 小程序启动,或从后台进入前台显示时 | |
function | 生命周期回调—监听小程序初隐藏 | 小程序从前台进入后台时 | |
function | 错误监听函数 | 小程序发生脚本错误,或者 api 调用失败时触发,会带上错误信息 | |
function | 页面不存在监听函数 | 小程序要打开的页面不存在时触发,会带上页面信息回调该函数 | |
其他 | any | 开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问 | - |
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({onPageNotFound(res) {wx.redirectTo({url: 'pages/...'}) // 如果是 tabbar 页面,请使用 wx.switchTab}})
getApp()
函数可以用来获取到小程序 App
实例。字段 | 类型 | 说明 | 最低版本 |
allowDefault | boolean | 在 App 未定义时返回默认实现。当 App 被调用时,默认实现中定义的属性会被覆盖合并到 App 中。 | - |
// other.js
const appInstance = getApp()
console.log(appInstance.globalData) // I am global data
App()
内的函数中调用 getApp()
,使用 this
就可以拿到 app 实例。场景值 | 场景 | appId含义 |
1020 | 公众号 profile 页相关小程序列表 | 来源公众号 |
1035 | 公众号自定义菜单 | 来源公众号 |
1036 | App 分享消息卡片 | 来源 App |
1037 | 小程序打开小程序 | 来源小程序 |
1038 | 从另一个小程序返回 | 来源小程序 |
1043 | 公众号模板消息 | 来源公众号 |
路由方式 | 页面栈表现 |
初始化 | 新页面入栈 |
打开新页面 | 新页面入栈 |
页面重定向 | 当前页面入栈,新页面入栈 |
页面返回 | 页面不断出栈,直到目标返回页 |
Tab切换 | 页面全部出栈,只留下新的Tab页面 |
重加载 | 页面全部出栈,只留下新的页面 |
getCurrentPages()
函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。App.onLaunch
的时候调用 getCurrentPages()
,此时 page
还没有生成。路由方式 | 触发时机 | 路由前页面 | 路由后页面 |
初始化 | 小程序打开的第一个页面 | - | onLoad, onShow |
打开新页面 | 调用 API wx.navigateTo 或使用组件 <navigator open-type="navigateTo"/> | onHide | onLoad, onShow |
页面重定向 | 调用 API wx.redirectTo 或使用组件 <navigator open-type="redirectTo"/> | onUnload | onLoad, onShow |
页面返回 | 调用 API wx.navigateBack 或使用组件<navigator open-type="navigateBack">或用户按左上角返回按钮 | onUnload | onShow |
Tab 切换 | 调用 API wx.switchTab 或使用组件 <navigator open-type="switchTab"/> 或用户切换 Tab | - | 各种情况请参考下表 |
重启动 | 调用 API wx.reLaunch 或使用组件 <navigator open-type="reLaunch"/> | onUnload | onLoad, onShow |
当前页面 | 路由后页面 | 出发的生命周期(按顺序) |
A | A | Nothing happend |
A | B | A.onHide(), B.onLoad(), B.onShow() |
A | B(再次打开) | A.onHide(), B.onShow() |
C | A | C.onUnload(), A.onShow() |
C | B | C.onUnload(), B.onLoad(), B.onShow() |
D | B | D.onUnload(), C.onUnload(), B.onLoad(), B.onShow() |
D(从转发进入) | A | D.onUnload(), A.onLoad(), A.onShow() |
D(从转发进入) | B | D.onUnload(), B.onLoad(), B.onShow() |
// app.jsApp({globalData: 1})
// a.js// The localValue can only be used in file a.js.const localValue = 'a'// Get the app instance.const app = getApp()// Get the global data and change it.app.globalData++
// b.js// You can redefine localValue in file b.js, without interference with the localValue in a.js.const localValue = 'b'// If a.js it run before b.js, now the globalData shoule be 2.console.log(getApp().globalData)
module.exports
或者 exports
才能对外暴露接口。exports
是 module.exports
的一个引用,因此在模块里边随意更改 exports
的指向会造成未知的错误。所以更推荐开发者采用 module.exports
来暴露模块接口,除非您已经清晰知道这两者的关系。node_modules
,开发者需要使用到 node_modules
时候建议拷贝出相关的代码到小程序的目录中或者使用小程序支持的 npm 功能。// common.jsfunction sayHello(name) {console.log(`Hello ${name} !`)}function sayGoodbye(name) {console.log(`Goodbye ${name} !`)}module.exports.sayHello = sayHelloexports.sayGoodbye = sayGoodbye
require(path)
将公共代码引入const common = require('common.js')Page({helloMINA() {common.sayHello('MINA')},goodbyeMINA() {common.sayGoodbye('MINA')}})
require
暂时不支持绝对路径。wx.onCompassChange(function (res) {console.log(res.direction)})
Sync
结尾的 API 都是同步 API, 如 wx.setStorageSync,wx.getSystemInfoSync 等。此外,也有一些其他的同步 API,详情参见 API 文档中的相关说明。try {wx.setStorageSync('key', 'value')} catch (e) {console.error(e)}
参数名 | 类型 | 必填 | 说明 |
success | function | 否 | 接口调用成功的回调函数 |
fail | function | 否 | 接口调用成功的回调函数 |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
其他 | any | - | 接口定义的其他参数 |
success
,fail
,complete
函数调用时会传入一个 Object
类型参数,包含以下字段:属性 | 类型 | 说明 |
errMsg | string | 错误信息,如果调用成功返回 ${apiName}:ok |
errCode | number | 错误码,仅部分 API 支持,具体含义请参考对应 API 文档,成功时为 0。 |
其他 | any | 接口返回的其他数据 |
wx.login({success(res) {console.log(res.code)}})
本页内容是否解决了您的问题?