阅读(4354) (11)

启动页面

2020-02-07 20:44:57 更新

page(params) 是进入某个页面的时候会执行的页面入口函数,params 是一个 object 类型的参数,定义了页面初始数据,生命周期钩子函数,事件处理函数等。


params 参数说明:

属性类型描述
dataObject页面的初始数据
onLoadFunction生命周期函数--监听页面加载
onReadyFunction生命周期函数--监听页面初次渲染完成
onShowFunction生命周期函数--监听页面显示
onHideFunction生命周期函数--监听页面隐藏
onUnloadFunction生命周期函数--监听页面卸载
onPullDownRefreshFunction页面相关事件处理函数--监听用户下拉动作
onReachBottomFunction页面上拉触底事件的处理函数
onShareAppMessageFunction用户点击右上角转发
onPageScrollFunction页面滚动触发事件的处理函数
其他Any开发者可以添加任意的函数或数据到 object 参数中,在页面的函数中用 this 可以访问
如果不注册 onShareAppMessage,会默认隐藏右上角胶囊按钮菜单里的分享按钮


示例代码:

// index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // Do some initialize when page load.
  },
  onReady: function() {
    // Do something when page ready.
  },
  onShow: function() {
    // Do something when page show.
  },
  onHide: function() {
    // Do something when page hide.
  },
  onUnload: function() {
    // Do something when page close.
  },
  onPullDownRefresh: function() {
    // Do something when pull down.
  },
  onReachBottom: function() {
    // Do something when page reach bottom.
  },
  onShareAppMessage: function() {
    // return custom share data when user share.
  },
  onPageScroll: function() {
    // Do something when page scroll
  },
  // Event handler.
  viewTap: function() {
    this.setData(
      {
        text: "Set some data for updating view."
      },
      function() {
        // this is setData callback
      }
    );
  },
  customData: {
    foo: "bar"
  }
});


启动参数

onLoad生命周期函数会接受到当前页面打开时设置的query参数。比如

// 页面url是'page/index/index?a=1&key=value'
...
onLoad: functions (options) {
	console.log(options) // {a: '1', key: 'value'}
}


页面首次渲染

初始化数据将作为页面的第一次渲染。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" }]
  }
});


页面事件处理

除了初始化数据和生命周期函数,Page 中还可以定义一些特殊的函数:事件处理函数。在渲染层可以在组件中加入事件绑定,当达到触发事件时,就会执行 Page 中定义的事件处理函数。

示例代码:

<!-- index.ttml -->
<view bindtap="viewTap"> click me </view>
// index.js
Page({
  viewTap: function() {
    console.log("view tap");
  }
});


更新页面渲染 setData()

字段类型必填描述
dataObject这次要改变的数据
callbackFunction回调函数

参数 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"
    });
  }
});