页面 Page

Page(Object)

Page(Object) 函数用来注册一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。

Object 参数说明:

属性类型描述
dataObject页面的初始数据
onLoadFunction生命周期回调—页面加载时触发
onShowFunction生命周期回调—监听页面显示,
onReadyFunction生命周期回调—监听页面初次渲染完成
onHideFunction生命周期回调—监听页面隐藏
onUnloadFunction生命周期回调—监听页面卸载
onShareAppMessageFunction转发
onPageScrollFunction页面滚动触发事件的处理函数
onTabItemTapFunction当前是 tab 页时,点击 tab 时触发
其他Any开发者可以添加任意的函数或数据到 Object 参数中,在本页面的函数中用 this 可以访问

示例代码:

  1. //index.js
  2. Page({
  3. data: {
  4. userName: ""
  5. },
  6. onLoad: function(e) {
  7. this.getName();
  8. },
  9. onReady: function() {
  10. },
  11. onShow: function() {
  12. },
  13. onHide: function() {
  14. },
  15. onUnload: function() {
  16. },
  17. onPullDownRefresh: function() {
  18. },
  19. onReachBottom: function() {
  20. },
  21. onShareAppMessage: function () {
  22. },
  23. onPageScroll: function() {
  24. },
  25. onTabItemTap(item) {
  26. console.log("当前点击的是:",JSON.stringify(item))
  27. },
  28. // Event handler.
  29. getName: function() {
  30. this.setData({
  31. userName:"cortana"
  32. })
  33. },
  34. customData: {
  35. dName: 'cortana'
  36. }
  37. })

data

data 是页面第一次渲染使用的初始数据

data 中的数据必须是以下类型:字符串,数字,布尔值,对象,数组。

渲染层可以通过 JXML 对数据进行绑定。

示例代码

  1. <view>{{userName}}}</view>
  2. <view>{{cover[0].url}}</view>
  1. Page({
  2. data: {
  3. userName: 'cortana',
  4. cover: [{url: 'http://xxxxx.jpg',title:"avatar"}, {url: 'http://xxxxx.jpg',title:"detail"}]
  5. }
  6. })

生命周期回调函数

生命周期的触发以及页面的路由方式详见

onLoad(Object query)

页面加载时触发。一个页面仅会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。

参数说明

名称类型说明
queryObject打开当前页面路径中的参数

onShow()

页面显示/切入前台时触发。

onReady()

页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。

注意:对界面内容进行设置的 API 如 jd.setNavigationBarTitle,请在onReady之后进行。

onHide()

页面隐藏/切入后台时触发。 如 navigateTo 或底部 tab 切换到其他页面,小程序切入后台等。

onUnload()

页面卸载时触发。如 redirectTo 或 navigateBack 到其他页面时。

页面事件处理函数

onPullDownRefresh()

监听用户下拉刷新事件。

onReachBottom()

监听用户上拉触底事件。

onPageScroll(Object)

监听用户滑动页面事件。

参数说明

属性类型说明
scrollTopNumber页面在垂直方向已滚动的距离(单位px)

onShareAppMessage(Object)

监听用户点击页面内分享按钮(<button> 组件 open-type="share")或右上角菜单“推荐给朋友”按钮的行为,支持自定义转发内容。此事件需要 return 一个 Object,用于配置分享的内容,详见“分享内容配置”

Object 参数说明

属性类型说明
fromString转发事件来源。button:页面内转发按钮;menu:右上角“推荐给朋友”菜单
targetObject如果 from 值是 button,则 target 是触发这次转发事件的 button,否则为 undefined
webViewUrlString页面中包含 <web-view> 组件时,返回当前 <web-view> 的url

分享内容配置

属性类型必填说明
mpIdstring微信小程序id,此场景用于分享到微信后,用户点击分享卡片,进入该appid对应的微信小程序,实现引流到微信小程序
titlestring转发标题
typenumber转发形式(0 - 小程序正式版 ;1 - 小程序测试版;2 - 小程序体验版;3 - h5链接(可自定义);不填默认成京东小程序官方的一个分享中间页面,点击可会会跳到京东app里面的对应小程序)
pathstring小程序路径
imageUrlstring图片地址(小程序封面图或h5页封面)
channelstring渠道(不写默认微信朋友,微信朋友圈)
urlstringh5链接地址(h5分享填写,不填默认中间页)
descstring分享内容摘要

示例代码

  1. Page({
  2. onShareAppMessage: function (res) {
  3. console.log(res.target);
  4. return {
  5. mpId: '分享的微信小程序appid',//
  6. title: '分享的标题',
  7. type: 0,
  8. desc: '分享的描述、摘要等',
  9. imageUrl: 'http://pic30.nipic.com/20130619/9885883_210838271000_2.jpg',//
  10. path: 'page/component/index',
  11. channel:'Wxfriends,Wxmoments',
  12. url: 'https://mp.jd.com/develop/index/ao00f99475552b3131',
  13. }
  14. }
  15. })

onTabItemTap(Object)

点击顶部、底部 tab 时触发

Object 参数说明:

参数类型说明
indexString被点击 tabItem 的序号,从 0 开始
pagePathString被点击 tabItem 的页面路径
textString被点击 tabItem 的按钮文字

示例代码

  1. Page({
  2. onTabItemTap(item) {
  3. console.log("tabbar点击:",item);
  4. }
  5. })

组件事件处理函数

Page 中还可以定义组件事件处理函数。在.jxml文件中,组件中加入事件绑定,当事件被触发时,就会执行 Page 中定义的事件处理函数。

示例代码

  1. <view bindtap="getUsername">获取用户名</view>
Page({
  getUsername: function() {
    console.log("点击了获取用户名")
  }
})

Page.route

到当前页面的路径,类型为 String

示例代码

<view bindtap="getCurrentRoute"> 点击查看当前页面路由 </view>
Page({
  getCurrentRoute: function() {
    console.log("当前页面route为:",this.route)
  }
})

Page.prototype.setData(Object data, Function callback)

setData 函数用于将数据用异步的方式从逻辑层发送到视图层,同时改变对应的 this.data 的值(同步)。

Object 参数说明:

字段类型必填描述
dataObject本次要改变的数据
callbackFunctionsetData 引起的界面更新渲染完毕后的回调函数

Objectkey: value 的形式表示,将 this.data 中的 key 对应的值改变成 value

注意:

  1. 直接修改 this.data 无法改变页面的状态的。
  2. 仅支持设置可 JSON 化的数据。
  3. 单次设置的数据量不宜过大,不能超过 1024k。
  4. 请不要手动把 data 中任何一项的 value 设为 undefined 。
示例代码

<!--index.jxml-->
<view>{{title}}</view>
<button bindtap="changeTitle"> 字符串类型的改变 </button>
<view>{{num}}</view>
<button bindtap="changeNum"> 数值类型的改变</button>
<view>{{array[0].name}}</view>
<button bindtap="changeArray">数组类型的改变 </button>
<view>{{object.name}}</view>
<button bindtap="changeObject">对象类型的改变 </button>
//index.js
Page({
  data: {
    title: '我是title',
    num: 0,
    array: [{name: 'cortana'}],
    object: {
      text: 'init data'
    }
  },
  changeText: function() {
    this.setData({
      title: '新标题'
    })
  },
  changeNum: function() {

    this.setData({
      num: this.data.num +1 
    })
  },
  changeArray: function() {
    this.setData({
      'array[0].name':'Mary'
    })
  },
  changeObject: function(){
    this.setData({
      'object.name': 'Mary'
    });
  }
})