Page对象
详情请参考:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html
Page对象作用:
Page(Object) 函数用来注册一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件
处理函数等。
数据渲染:
需要放在模板中进行渲染的数据,需要放在 Page 对象的 data 属性中。示例代码如下:
Page({
data: {
person: {
username: "知了课堂",
age: 18
}
}
})
<view>
</view>
如果以后想要修改 data 中的值,应该使用 setData 方法。 setData 函数用于将数据从逻辑层发送到视图层(异
步),同时改变对应的 this.data 的值(同步)。注意事项:
- 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
- 放到 data 中的值,只能使用可以 JSON 序列化的:字符串,数字,布尔值,对象,数组。否则将不会渲染。
- 其中 key 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如
array[2].message , a.b.c.d ,并且不需要在 this.data 中预先定义。
Page生命周期函数:
onLoad(Object query):
页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。一般建议在
这个函数中做一些页面的数据初始化工作。
onShow():
页面显示/切入前台时触发。比如新推入了一个新的页面,那么原来的页面就处于后台,这时候如果把新页面又移
除掉,那么下面的页面就会调用 onShow 方法。
onReady():
页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互了。对界面内
容进行设置的 API 如 wx.setNavigationBarTitleText ,比较合适在这个里面执行。
onHide()
页面隐藏/切入后台时触发。如 navigateTo 或底部 tab 切换到其他页面,小程序切入后台等。
onUnload()
页面卸载时触发。如 redirectTo 或 navigateBack 到其他页面时。
页面路由
在小程序中所有页面的路由全部由框架进行管理。
页面栈
框架以栈的形式维护了当前的所有页面。 当发生路由切换的时候,页面栈的表现如下:
路由方式 | 页面栈表现 |
---|---|
初始化 | 新页面入栈 |
打开新页面 | 新页面入栈 |
页面重定向 | 当前页面出栈,新页面入栈 |
页面返回 | 页面不断出栈,直到目标返回页 |
Tab 切换 | 页面全部出栈,只留下新的 Tab 页面 |
重加载 | 页面全部出栈,只留下新的页面 |
getCurrentPages()
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 |
Tab 切换对应的生命周期(以 A、B 页面为 Tabbar 页面,C 是从 A 页面打开的页面,D 页面是从 C 页面打开的页面为例):
当前页面 | 路由后页面 | 触发的生命周期(按顺序) |
---|---|---|
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() |
Tips:
-
navigateTo
,redirectTo
只能打开非 tabBar 页面。 -
switchTab
只能打开 tabBar 页面。 -
reLaunch
可以打开任意页面。 - 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
- 调用页面路由带的参数可以在目标页面的
onLoad
中获取。
网友评论