页面
收藏
我的收藏注册页面
对于小程序中的每个页面,都需要在页面对应的
page.js
文件中进行注册,指定页面的初始数据、生命周期回调、事件处理函数等。注册页面有两种方式:使用 Page 注册和使用 Component 构造器注册。
使用 Page 注册页面
简单的页面可以使用
Page()
进行注册。//index.js Page({ data: { text: "This is page data.", }, onLoad: function (options) { // Do some initialize when page load. }, onShow: function () { // Do something when page show. }, onReady: function () { // Do something when page ready. }, onHide: function () { // Do something when page hide. }, onUnload: function () { // Do something when page close. }, onReachBottom: function () { // Do something when page reach bottom. }, onPageScroll: function () { // Do something when page scroll }, onResize: function () { // Do something when page resize }, // Event handler. viewTap: function () { this.setData( { text: "Set some data for updating view.", }, function () { // this is setData callback } ); }, // Custom Data customData: { hi: "hello", }, });
使用 Component 构造器注册页面
复杂的页面可以使用
Component
构造器来构造页面。Component
构造器的主要区别是:方法需要放在 methods: { }
里面。Component({ data: { text: "This is page data.", }, methods: { onLoad: function (options) { // 页面创建时执行 }, onPullDownRefresh: function () { // 下拉刷新时执行 }, // 事件响应函数 viewTap: function () { // ... }, }, });
page
page(params)
是进入某个页面的时候会执行的页面入口函数,params 是一个 object 类型的参数,定义了页面初始数据,生命周期函数,事件处理函数等。params 参数说明
属性 | 类型 | 描述 |
data | Object | 页面的初始数据 |
onLoad | Function | 生命周期函数--监听页面加载 |
onReady | Function | 生命周期函数--监听页面初次渲染完成 |
onShow | Function | 生命周期函数--监听页面显示 |
onHide | Function | 生命周期函数--监听页面隐藏 |
onUnload | Function | 生命周期函数--监听页面卸载 |
onResize | Function | 生命周期函数--监听页面尺寸变化,在直播小程序卡片、POI 详情页商品入口的七分屏场景中使用。 |
onPullDownRefresh | Function | 页面相关事件处理函数--监听用户下拉动作 |
onReachBottom | Function | 页面上拉触底事件的处理函数 |
onShareAppMessage | Function | |
onUploadDouyinVideo | Function | |
onLiveMount | Function | |
onPageScroll | Function | 页面滚动触发事件的处理函数 |
其他 | Any | 开发者可以添加任意的函数或数据到 object 参数中,在页面的函数中用 this 可以访问。 |
示例代码
初始数据
初始化数据将作为页面的第一次渲染。data 将会以 JSON 的形式由逻辑层传至渲染层,所以其数据必须是可以转成 JSON 的格式:字符串,数字,布尔值,对象,数组。
渲染层可以通过 TTML 对数据进行绑定。
示例代码
<!-- index.ttml --> <view>{{text}}</view> <view>{{array[0].msg}}</view>
// index.js Page({ data: { text: "init data", array: [{ msg: "1" }, { msg: "2" }], }, });
生命周期回调函数
onLoad生命周期函数会接受到当前页面打开时设置的query参数。比如:
// 页面url是'page/index/index?a=1&key=value' ... onLoad: function (options) { console.log(options) // {a: '1', key: 'value'} }
事件处理函数
除了初始化数据和生命周期函数,Page 中还可以定义一些特殊的函数:事件处理函数。在渲染层可以在组件中加入事件绑定,当达到触发事件时,就会执行 Page 中定义的事件处理函数。
示例代码
<!-- index.ttml --> <view bindtap="viewTap"> click me </view>
// index.js Page({ viewTap: function () { console.log("view tap"); }, });
更新页面渲染 setData()
字段 | 类型 | 必填 | 描述 |
data | Object | 是 | 这次要改变的数据 |
callback | Function | 否 | 回调函数 |
参数 data 以 key,value 的形式表示将 this.data 中的 key 对应的值改变成 value。 callback 是一个回调函数,在这次 setData 对界面渲染完毕后调用。
示例代码
<!--index.ttml--> <view>{{text}}</view> <button bindtap="changeText">Change normal data</button> <view>{{num}}</view> <button bindtap="changeNum">Change normal num</button> <view>{{array[0].text}}</view> <button bindtap="changeItemInArray">Change Array data</button> <view>{{object.text}}</view> <button bindtap="changeItemInObject">Change Object data</button> <view>{{newField.text}}</view> <button bindtap="addNewField">Add new data</button>
//index.js Page({ data: { text: "init data", num: 0, array: [{ text: "init data" }], object: { text: "init data", }, }, changeText: function () { // this.data.text = 'changed data' // 这样无法更新UI this.setData({ text: "changed data", }); }, changeNum: function () { this.data.num = 1; this.setData({ num: this.data.num, }); }, changeItemInArray: function () { this.setData({ "array[0].text": "changed data", }); }, changeItemInObject: function () { this.setData({ "object.text": "changed data", }); }, addNewField: function () { this.setData({ "newField.text": "new data", }); }, });
分屏场景页面尺寸变化
getCurrentPages()
getCurrentPages()
函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。