注册页面
页面 Page
Page(Object)
Page(Object)
函数用来注册一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。
Object 参数说明:
属性 | 类型 | 描述 |
---|---|---|
data | Object | 页面的初始数据 |
onLoad | Function | 生命周期回调—页面加载时触发 |
onShow | Function | 生命周期回调—监听页面显示, |
onReady | Function | 生命周期回调—监听页面初次渲染完成 |
onHide | Function | 生命周期回调—监听页面隐藏 |
onUnload | Function | 生命周期回调—监听页面卸载 |
onPullDownRefresh | Function | 监听用户下拉动作 |
onShareAppMessage | Function | 转发 |
onPageScroll | Function | 页面滚动触发事件的处理函数 |
onTabItemTap | Function | 当前是 tab 页时,点击 tab 时触发 |
其他 | Any | 开发者可以添加任意的函数或数据到 Object 参数中,在本页面的函数中用 this 可以访问 |
示例代码:
//index.js
Page({
data: {
userName: ""
},
onLoad: function(e) {
this.getName();
},
onReady: function() {
},
onShow: function() {
},
onHide: function() {
},
onUnload: function() {
},
onPullDownRefresh: function() {
},
onReachBottom: function() {
},
onShareAppMessage: function () {
},
onPageScroll: function() {
},
onTabItemTap(item) {
console.log("当前点击的是:",JSON.stringify(item))
},
// Event handler.
getName: function() {
this.setData({
userName:"cortana"
})
},
customData: {
dName: 'cortana'
}
})
data
data
是页面第一次渲染使用的初始数据。
data 中的数据必须是以下类型:字符串,数字,布尔值,对象,数组。
渲染层可以通过 JXML 对数据进行绑定。
示例代码
<view>{{userName}}}</view>
<view>{{cover[0].url}}</view>
Page({
data: {
userName: 'cortana',
cover: [{url: 'http://xxxxx.jpg',title:"avatar"}, {url: 'http://xxxxx.jpg',title:"detail"}]
}
})
生命周期回调函数
生命周期的触发以及页面的路由方式详见
onLoad(Object query)
页面加载时触发。一个页面仅会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。
参数说明
名称 | 类型 | 说明 |
---|---|---|
query | Object | 打开当前页面路径中的参数 |
onShow()
页面显示/切入前台时触发。
onReady()
页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。
注意:对界面内容进行设置的 API 如 jd.setNavigationBarTitle,请在onReady之后进行。
onHide()
页面隐藏/切入后台时触发。 如 navigateTo 或底部 tab 切换到其他页面,小程序切入后台等。
onUnload()
页面卸载时触发。如 redirectTo 或 navigateBack 到其他页面时。
页面事件处理函数
onPullDownRefresh()
监听用户下拉刷新事件。
- 需要在app.json的window选项中或页面配置中开启enablePullDownRefresh。
- 可以通过jd.startPullDownRefresh触发下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。
- 当处理完数据刷新后,jd.stopPullDownRefresh可以停止当前页面的下拉刷新。
onReachBottom()
监听用户上拉触底事件。
onPageScroll(Object)
监听用户滑动页面事件。
参数说明
属性 | 类型 | 说明 |
---|---|---|
scrollTop | Number | 页面在垂直方向已滚动的距离(单位px) |
onShareAppMessage(Object)
监听用户点击页面内分享按钮(<button>
组件 open-type="share"
)或右上角菜单“推荐给朋友”按钮的行为,支持自定义转发内容。此事件需要 return 一个 Object,用于配置分享的内容,详见“分享内容配置”
Object 参数说明
属性 | 类型 | 说明 |
---|---|---|
from | String | 转发事件来源。button:页面内转发按钮;menu:右上角“推荐给朋友”菜单 |
target | Object | 如果 from 值是 button,则 target 是触发这次转发事件的 button,否则为 undefined |
webViewUrl | String | 页面中包含 <web-view> 组件时,返回当前 <web-view> 的url |
分享内容配置
属性 | 类型 | 必填 | 说明 |
---|---|---|---|
mpId | string | 否 | 微信小程序id,此场景用于分享到微信后,用户点击分享卡片,进入该appid对应的微信小程序,实现引流到微信小程序 |
title | string | 否 | 转发标题 |
type | number | 否 | 转发形式(0 - 微信小程序正式版 ;1 - 微信小程序开发版;2 - 微信小程序体验版;京东App9.0.0开始不填或者其他值都会先判断是否有url参数,如果有打开分享后显示url对应页面,否则默认生成京东小程序官方的一个分享中间页面,点击可跳到京东app里面的对应小程序。) |
path | string | 否 | 要打开小程序的页面路径,例如:'pages/index' ,开头不要加'/',以下错误示范:'/page/index' |
mpPath | string | 否 | 微信小程序路径 |
imageUrl | string | 是 | 图片地址(小程序封面图或h5页封面) |
channel | string | 否 | 渠道(不写默认微信朋友,微信朋友圈) |
url | string | 否 | h5链接地址(h5分享填写,不填默认中间页) |
desc | string | 否 | 分享内容摘要 |
注 京东APP 9.0.0版本之前url默认使用默认兜底页,不支持自定义
示例代码
Page({
onShareAppMessage: function (res) {
console.log(res.target);
return {
mpId: '分享的微信小程序appid',
title: '分享的标题',
type: 0,
desc: '分享的描述、摘要等',
imageUrl: 'http://pic30.nipic.com/20130619/9885883_210838271000_2.jpg',
path: 'page/component/index',
mpPath:'分享的微信小程序路径',
channel:'Wxfriends,Wxmoments',
url: 'https://mp.jd.com/develop/index/ao00f99475552b3131',
}
}
})
示例代码分享到微信好友后,会打开对应的正式版微信小程序,分享到朋友圈会打开url对应的H5页面。
onTabItemTap(Object)
点击顶部、底部 tab 时触发
Object 参数说明:
参数 | 类型 | 说明 |
---|---|---|
index | String | 被点击 tabItem 的序号,从 0 开始 |
pagePath | String | 被点击 tabItem 的页面路径 |
text | String | 被点击 tabItem 的按钮文字 |
示例代码
Page({
onTabItemTap(item) {
console.log("tabbar点击:",item);
}
})
组件事件处理函数
Page
中还可以定义组件事件处理函数。在.jxml
文件中,组件中加入事件绑定,当事件被触发时,就会执行 Page 中定义的事件处理函数。
示例代码
<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 参数说明:
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
data | Object | 是 | 本次要改变的数据 |
callback | Function | 否 | setData 引起的界面更新渲染完毕后的回调函数 |
Object
以 key: value
的形式表示,将 this.data
中的 key
对应的值改变成 value
。
注意:
- 直接修改 this.data 无法改变页面的状态的。
- 仅支持设置可 JSON 化的数据。
- 单次设置的数据量不宜过大,不能超过 1024k。
- 请不要手动把 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'
});
}
})