基于JavaScript开发,增添了一些新功能
1、增加 App 和 Page 方法,进行程序和页面的注册。
2、增加 getApp 和 getCurrentPages 方法,分别用来获取 App 实例和当前页面栈。
3、提供丰富的 API,如微信用户数据,扫一扫,支付等微信特有能力。
4、每个页面有独立的作用域,并提供模块化能力。
注意:小程序框架的逻辑层并非运行在浏览器中,因此 JavaScript 在 web 中一些能力都无法使用,如 window,document 等。
一、App(object)
1、App(object)必须在 app.js 中调用,必须调用且只能调用一次。不然会出现无法预期的后果。
2、前台、后台定义: 当用户点击右上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。关闭小程序(基础库版本1.1.0开始支持): 当用户从扫一扫、转发等入口(场景值为1007, 1008, 1011, 1025)进入小程序,且没有置顶小程序的情况下退出,小程序会被销毁。
3、全局的 getApp() 函数可以用来获取到小程序 App 实例
不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例。
通过 getApp() 获取实例之后,不要私自调用生命周期函数。
二、小程序场景值
1、对于小程序,可以在 App 的 onLaunch 和 onShow,或wx.getLaunchOptionsSync 中获取上述场景值。
2、对于小游戏,可以在 wx.getLaunchOptionsSync 和 wx.onShow 中获取上述场景值
三、页面Page(Object)
Page({
data:{
//页面第一次渲染的 *初始数据*
},
onLoad(){
// 页面加载时触发,可以获取当前页面路径中的参数
console.log(this.route)
},
onShow(){
// 页面显示/切入前台时触发
},
onReady(){
//页面完成初次渲染时触发
},
onHide(){
//页面隐藏/切入后台时触发
},
onUnload(){
//页面卸载时触发
},
onPullDownRefresh(){
//监听用户下拉刷新事件
},
onReachBottom(){
//监听用户上拉触底事件
},
onPageScroll(Object){
// 监听用户滑动页面事件。
//注意:请只在需要的时候才在 page 中定义此方法,不要定义空方法。以减少不必要的事件派发对渲染层-逻辑层通信的影响。
//注意:请避免在 onPageScroll 中过于频繁的执行 setData 等引起逻辑层-渲染层通信的操作。尤其是每次传输大量数据,会影响通信耗时。
},
onShareAppMessage(Object){
//监听用户点击页面内转发按钮(<button> 组件 open-type="share")或右上角菜单“转发”按钮的行为,并自定义转发内容。
},
onResize(object){
//小程序屏幕旋转时触发
},
onTabItemTap(Object){
//点击tab时触发
},
add(){
//组件事件处理函数
this.setData ({
text:'helo'
})
}
})
四、页面生命周期
五、路由
1、getCurrentPages()
getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。
注意:
- 不要尝试修改页面栈,会导致路由以及页面状态错误。
- 不要在 App.onLaunch 的时候调用 getCurrentPages(),此时 page 还没有生成。
2、路由方式 - navigateTo, redirectTo 只能打开非 tabBar 页面。
- switchTab 只能打开 tabBar 页面。
- reLaunch 可以打开任意页面。
- 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
- 调用页面路由带的参数可以在目标页面的onLoad中获取。
六、模块化
用module.exports暴露出来的一个单独的js文件,写一写方法。使用时通过require引入,require暂时不支持绝对路径。
七、API
1、事件监听API:以 on 开头的API是用来监听某个时间是否触发。
2、同步API:以 Sync 结尾的 API 都是同步 API。
3、异步API:大多数 API 都是异步 API