对象模块

当前模块对象

属性

属性 类型 说明
exports Object 模块向外暴露的对象,使用require引用该模块时可以获取

示例代码

// common.js
function sayHello(name) {
  console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
  console.log(`Goodbye ${name} !`)
}

module.exports.sayHello = sayHello
exports.sayGoodbye = sayGoodbye

require

引入模块。返回模块通过 module.exportsexports 暴露的接口。

需要引入其他分包的模块的时候,可以通过配置 callback 回调函数来异步获取指定模块。异步获取失败的时候,将会触发 error 回调函数。

参数

名称 类型 必填 说明
path string 需要引入模块文件相对于当前文件的相对路径,或npm模块名,或npm模块路径。默认不支持绝对路径,可通过配置 resolveAlias 自定义路径映射。
callback function 异步加载成功回调函数,该回调函数参数为成功加载的模块。
error function 异步加载失败回调函数,该回调函数参数为错误信息和模块名。

require.async 链式调用

可以通过链式调用的方式使用。

require
    .async('path/to/mod')
    .then((mod) => {
        console.log(mod)
    })
    .catch(({ errMsg, mod }) => {
        console.error(`path: ${mod}, ${errMsg}`)
    })

示例代码

同一包内调用

// common.js
function sayHello(name) {
  console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
  console.log(`Goodbye ${name} !`)
}

module.exports.sayHello = sayHello
exports.sayGoodbye = sayGoodbye
var common = require('common.js')
Page({
  helloMINA: function() {
    common.sayHello('MINA')
  },
  goodbyeMINA: function() {
    common.sayGoodbye('MINA')
  }
})

跨分包异步调用

// subpackage/common.js 分包 common 文件
export const sayHello = () => console.log("hello")
// pages/index.js 主包页面

let common;
require('../../subpackage/common.js', (mod) => {
    common = mod
}, ({ errMsg, mod }) => {
    console.error(`path: ${mod}, ${errMsg}`)
})

Page({
    sayHello() {
        common && common.sayHello()
    }
})

Behavior(Object object)

注册一个 behavior,接受一个 Object 类型的参数。

参数

Object object

定义段 类型 是否必填 描述 最低版本
properties Object Map 微信小程序组件的对外属性,是属性名到属性设置的映射表
data Object 微信小程序组件的内部数据,和 properties 一同用于组件的模板渲染
observers Object 微信小程序组件数据字段监听器,用于监听 properties 和 data 的变化,参见 数据监听器 ‘2.6.1’
methods Object 微信小程序组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用,参见 组件间通信与事件
behaviors String Array 类似于mixins和traits的微信小程序组件间代码复用机制,参见 behaviors
created Function 微信小程序组件生命周期函数-在组件实例刚刚被创建时执行,注意此时不能调用 setData )
attached Function 微信小程序组件生命周期函数-在组件实例进入页面节点树时执行)
ready Function 微信小程序组件生命周期函数-在组件布局完成后执行)
moved Function 微信小程序组件生命周期函数-在组件实例被移动到节点树另一个位置时执行)
detached Function 微信小程序组件生命周期函数-在组件实例被从页面节点树移除时执行)
relations Object 微信小程序组件间关系定义,参见 组件间关系
lifetimes Object 微信小程序组件生命周期声明对象,参见 组件生命周期 ‘2.2.3’
pageLifetimes Object 微信小程序组件所在页面的生命周期声明对象,参见 组件生命周期 ‘2.2.3’
definitionFilter Function 定义段过滤器,用于自定义微信小程序组件扩展,参见 自定义组件扩展 ‘2.2.3’

示例代码

// my-behavior.js
module.exports = Behavior({
  behaviors: [],
  properties: {
    myBehaviorProperty: {
      type: String
    }
  },
  data: {
    myBehaviorData: {}
  },
  attached: function(){},
  methods: {
    myBehaviorMethod: function(){}
  }
})

微信小程序用户隐私保护指引内容介绍

本指引依据适用的个人信息保护相关法律法规制定,包括但不限于《中华人民共和国个人信息保护法》等,由开发者根据实际情况填写。

微信小程序用户隐私保护指引包括下列板块,其中具体的说明仅为示例。

引导语

  本指引是微信小程序示例微信小程序开发者”深圳市腾讯计算机系统有限公司“(以下简称“开发者”)为处理你的个人信息而制定。

开发者处理的信息

  根据法律规定,开发者仅处理实现微信小程序功能所必要的信息。
  - 开发者收集你选中的照片或视频信息,用于用户上传提交代码审核所需要的截图。

开发者需在此板块声明所处理的用户信息,微信会根据微信小程序版本隐私接口调用情况展示必填项,开发者可自主勾选其他项目。隐私接口与对应的处理的信息关系如下:

处理的信息 接口或组件
收集你的昵称、头像 <button open-type="chooseAvatar"><input type="nickname">、wx.getUserInfo (已回收)、wx.getUserProfile (已回收)、<button open-type="userInfo">(已回收)
收集你的位置信息 wx.authorize({scope:’scope.userLocation’})、wx.authorize({scope: ‘scope.userLocationBackground’})、wx.authorize({scope: ‘scope.userFuzzyLocation’})、wx.getLocation、wx.startLocationUpdate、wx.startLocationUpdateBackground、wx.getFuzzyLocation、MapContext.moveToLocation
收集你选择的位置信息 wx.choosePoi、wx.chooseLocation
收集你的地址 wx.chooseAddress
收集你的发票信息 wx.chooseInvoiceTitle、wx.chooseInvoice
收集你的微信运动步数 wx.authorize({scope: ‘scope.werun’})、wx.getWeRunData
收集你的手机号 <button open-type="getPhoneNumber"><button open-type="getRealtimePhoneNumber">
收集你的车牌号 wx.chooseLicensePlate
收集你选中的照片或视频信息 wx.chooseImage、wx.chooseMedia、wx.chooseVideo
收集你选中的文件 wx.chooseMessageFile
访问你的麦克风 wx.authorize({scope: ‘scope.record’})、wx.startRecord、RecorderManager.start、<live-pusher>、wx.joinVoIPChat
访问你的摄像头 wx.authorize({scope: ‘scope.camera’})、wx.createVKSession、<camera><live-pusher><voip-room>
访问你的蓝牙 wx.authorize({scope: ‘scope.bluetooth’})、wx.openBluetoothAdapter、wx.createBLEPeripheralServer
使用你的相册(仅写入)权限 wx.authorize({scope: ‘scope.writePhotosAlbum’})、wx.saveImageToPhotosAlbum、wx.saveVideoToPhotosAlbum
使用你的通讯录(仅写入)权限 wx.authorize({scope: ‘scope.addPhoneContact’})、wx.addPhoneContact
使用你的日历(仅写入)权限 wx.authorize({scope: ‘scope.addPhoneCalendar’})、wx.addPhoneRepeatCalendar、wx.addPhoneCalendar
调用你的加速传感器 wx.startAccelerometer
调用你的磁场传感器 wx.startCompass
调用你的方向传感器 wx.startDeviceMotionListening
调用你的陀螺仪传感器 wx.startGyroscope
读取你的剪切板 wx.setClipboardData、wx.getClipboardData

平台会对开发者处理信息的目的进行审核,请如实填写。

第三方插件信息

  为实现特定功能,开发者可能会接入由第三方提供的插件。第三方插件的个人信息处理规则,请以其公示的官方说明为准。XXX微信小程序接入的第三方插件信息如下:

  插件名称:客服助手
  插件提供方名称: 深圳市腾讯计算机系统有限公司
  - 开发者收集你选中的照片或视频信息,用于在客服会话中发送图片或视频类型的聊天内容。
  - 为了发送语音类型的聊天内容,开发者将在获取你的明示同意后,访问你的麦克风。

针对由引用了插件的微信小程序,将会在用户隐私保护指引中展示,展示内容包括插件名称、插件提供方名称与开发者处理的信息及目的。

第三方服务商信息

  微信小程序助手微信小程序由深圳市腾讯计算机系统有限公司代为开发,开发者保证深圳市腾讯计算机系统有限公司将在本指引规定范围内处理你的信息。

针对由代开发服务商进行开发的微信小程序,将会在用户隐私保护指引中进行展示。

用户权益

  1. 关于收集你的位置信息,你可以通过以下路径:微信小程序主页右上角“…”—“设置”—点击特定信息—点击“不允许”,撤回对开发者的授权。
  2. 关于收集你的手机号、收集你的发票信息,你可以通过以下路径:微信小程序主页右上角“...” — “设置” — “微信小程序已获取的信息” — 点击特定信息 — 点击“通知开发者删除”,开发者承诺收到通知后将删除信息。
  3. 关于你的个人信息,你可以通过以下方式与开发者联系,行使查阅、复制、更正、删除等法定权利。
  - 邮箱: miniprogram@tencent.com

微信会根据微信小程序版本隐私接口调用情况生成第1条与第2条描述,开发者需填写联系方式供用户联系开发者用于行使查阅、复制、更正、删除等法定权利。

若开发者在微信小程序内提供其他的用户可以行使查阅、复制、更正、删除等法定权利的入口,可以通过补充文档进行说明。

开发者对信息的存储

开发者需声明对信息的存储期限,如

  固定存储期限:180天

信息的使用规则

  1. 开发者将会在本指引所明示的用途内使用收集的信息。
  2. 如开发者使用你的信息超出本指引目的或合理范围,开发者必须在变更使用目的或范围前,再次以弹窗方式告知并征得你的明示同意。

信息对外提供

  1. 开发者承诺,不会主动共享或转让你的信息至任何第三方,如存在确需共享或转让时,开发者应当直接征得或确认第三方征得你的单独同意。
  2. 开发者承诺,不会对外公开披露你的信息,如必须公开披露时,开发者应当向你告知公开披露的目的、披露信息的类型及可能涉及的信息,并征得你的单独同意。

联系方式

  你认为开发者未遵守上述约定,或有其他的投诉建议、或未成年人个人信息保护相关问题,可通过以下方式与开发者联系;或者向微信进行投诉。
  - 邮箱 : miniprogram@**.com

补充文档

开发者可选择是否上传补充文档,微信会对文档内容进行审核。

当前文档格式只支持txt格式的纯文本文件,大小不超过100KB。

日期

  更新日期:2021-11-03
  生效日期:2021-11-03

Component

创建自定义组件,接受一个 Object 类型的参数。

参数

Object object

定义段 类型 是否必填 描述 最低版本
properties Object Map 组件的对外属性,是属性名到属性设置的映射表
data Object 组件的内部数据,和 properties 一同用于组件的模板渲染
observers Object 组件数据字段监听器,用于监听 properties 和 data 的变化,参见 数据监听器 ‘2.6.1’
methods Object 组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用,参见 组件间通信与事件
behaviors String Array 类似于mixins和traits的组件间代码复用机制,参见 behaviors
created Function 组件生命周期函数-在组件实例刚刚被创建时执行,注意此时不能调用 setData
attached Function 组件生命周期函数-在组件实例进入页面节点树时执行
ready Function 组件生命周期函数-在组件布局完成后执行
moved Function 组件生命周期函数-在组件实例被移动到节点树另一个位置时执行
detached Function 组件生命周期函数-在组件实例被从页面节点树移除时执行
relations Object 组件间关系定义,参见 组件间关系
externalClasses String Array 组件接受的外部样式类,参见 外部样式类
options Object Map 一些选项(文档中介绍相关特性时会涉及具体的选项设置,这里暂不列举)
lifetimes Object 组件生命周期声明对象,参见 组件生命周期 ‘2.2.3’
pageLifetimes Object 组件所在页面的生命周期声明对象,参见 组件生命周期 ‘2.2.3’

生成的组件实例可以在组件的方法、生命周期函数和属性 observer 中通过 this 访问。组件包含一些通用属性和方法。

属性名 类型 描述
is String 组件的文件路径
id String 节点id
dataset String 节点dataset
data Object 组件数据,包括内部数据和属性值
properties Object 组件数据,包括内部数据和属性值(与 data 一致)
router Object 相对于当前自定义组件的 Router 对象
pageRouter Object 相对于当前自定义组件所在页面的 Router 对象
renderer string 渲染当前组件的渲染后端
方法名 参数 描述 最低版本
setData Object newData 设置data并执行视图层渲染
hasBehavior Object behavior 检查组件是否具有 behavior (检查时会递归检查被直接或间接引入的所有behavior)
triggerEvent String name, Object detail, Object options 触发事件,参见 组件间通信与事件
createSelectorQuery 创建一个 SelectorQuery 对象,选择器选取范围为这个组件实例内
createIntersectionObserver 创建一个 IntersectionObserver 对象,选择器选取范围为这个组件实例内
createMediaQueryObserver 创建一个 MediaQueryObserver 对象 ‘2.11.1’
selectComponent String selector 使用选择器选择组件实例节点,返回匹配到的第一个组件实例对象(会被 wx://component-export 影响)
selectAllComponents String selector 使用选择器选择组件实例节点,返回匹配到的全部组件实例对象组成的数组(会被 wx://component-export 影响)
selectOwnerComponent 选取当前组件节点所在的组件实例(即组件的引用者),返回它的组件实例对象(会被 wx://component-export 影响) ‘2.8.2’
getRelationNodes String relationKey 获取这个关系所对应的所有关联节点,参见 组件间关系
groupSetData Function callback 立刻执行 callback ,其中的多个 setData 之间不会触发界面绘制(只有某些特殊场景中需要,如用于在不同组件同时 setData 时进行界面绘制同步) ‘2.4.0’
getTabBar 返回当前页面的 custom-tab-bar 的组件实例,详见自定义 tabBar ‘2.6.2’
getPageId 返回页面标识符(一个字符串),可以用来判断几个自定义组件实例是不是在同一个页面内 ‘2.7.1’
animate String selector, Array keyframes, Number duration, Function callback 执行关键帧动画,详见动画 ‘2.9.0’
clearAnimation String selector, Object options, Function callback 清除关键帧动画,详见动画 ‘2.9.0’
applyAnimatedStyle String selector, Function updater, Object config, Function callback 绑定由 worklet 驱动的样式到相应的节点,详见worklet 动画 ‘2.29.0’
clearAnimatedStyle String selector, Array styleIds, Function callback 清除节点上 worklet 驱动样式的绑定关系 ‘2.30.1’
setUpdatePerformanceListener Object options, Function listener 设置更新性能统计信息接收函数,详见获取更新性能统计信息 ‘2.12.0’

applyAnimatedStyle 参数定义

定义段 类型 是否必填 描述 最低版本
selector String 节点选择器 ‘2.29.0’
updater Function worklet 样式更新函数 ‘2.29.0’
userConfig Object 配置项 ‘2.30.1’
callback Function 完成样式绑定的回调 ‘2.30.1’

配置项定义

属性 类型 默认值 描述
immediate boolean true 是否立即执行一次 updater 函数
flush string async 刷新时机,枚举值 async / sync

selector 语法同 SelectorQuery.select。

默认情况下,updater 函数将被执行一次,其结果作为初值被应用到节点上,设置 immediate: false 则跳过首次执行。

updater 函数返回的 StyleObject 支持的样式集,参考 skyline wxss 样式。StyleObject 的 key 为 css 属性的驼峰写法。

当依赖的 sharedValue 值更新时,updater 函数将被重新执行,并将新的 style 应用到选中节点上。默认情况下,新的样式会在下一个渲染时间片上生效(性能更好),设置 flush: sync 可使得在当前渲染时间片上生效。

callback 回调返回的 styleId,可用于清除样式绑定。

const offset = shared(0)
const styleIds = []
this.applyAnimatedStyle('.box', () => {
  'worklet'
  return {
    transform: `translateX(${offset.value}px) rotate(30deg)`
  }
}, {
  immediate: true,
  flush: 'async'
}, (res) => {
  console.log('animatedStyle 已绑定到节点 ', res.styleId)
  styleIds.push(res.styleId)
})

this.clearAnimatedStyle('.box', styleIds, () => {
  console.log('animatedStyle 已清除绑定')
})

clearAnimatedStyle 参数定义

定义段 类型 是否必填 描述 最低版本
selector String 节点选择器 ‘2.30.1’
styleIds Array<Number> 需要清除的 styleId 集合 ‘2.30.1’
callback Function 清除样式绑定的回调 ‘2.30.1’

styleIds 数组为空,则清除选中节点上所有绑定的 animatedStyle,需要注意的是样式并不会重置,只是解除了依赖关系。styleId 可由 applyAnimatedStyle 回调参数中获取。

节点移除时,相关的 animatedStyle 会自动释放,clearAnimatedStyle 可用于需要提前解绑的情况。

示例代码

在开发者工具中预览效果

Component({

  behaviors: [],

  // 属性定义(详情参见下文)
  properties: {
    myProperty: { // 属性名
      type: String,
      value: ''
    },
    myProperty2: String // 简化的定义方式
  },

  data: {}, // 私有数据,可用于模板渲染

  lifetimes: {
    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
    attached: function () { },
    moved: function () { },
    detached: function () { },
  },

  // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
  attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
  ready: function() { },

  pageLifetimes: {
    // 组件所在页面的生命周期函数
    show: function () { },
    hide: function () { },
    resize: function () { },
  },

  methods: {
    onMyButtonTap: function(){
      this.setData({
        // 更新属性和数据的方法与更新页面数据的方法类似
      })
    },
    // 内部方法建议以下划线开头
    _myPrivateMethod: function(){
      // 这里将 data.A[0].B 设为 'myPrivateData'
      this.setData({
        'A[0].B': 'myPrivateData'
      })
    },
    _propertyChange: function(newVal, oldVal) {

    }
  }

})

注意:在 properties 定义段中,属性名采用驼峰写法(propertyName);在 wxml 中,指定属性值时则对应使用连字符写法(component-tag-name property-name="attr value"),应用于数据绑定时采用驼峰写法(attr="")。

properties 定义

定义段 类型 是否必填 描述 最低版本
type 属性的类型
optionalTypes Array 属性的类型(可以指定多个) ‘2.6.5’
value 属性的初始值
observer Function 属性值变化时的回调函数

属性值的改变情况可以使用 observer 来监听。目前,在新版本基础库中不推荐使用这个字段,而是使用 Component 构造器的 observers 字段代替,它更加强大且性能更好。

请注意: 定义段中的 type 字段为 必填 项,虽然 ‘2.17.2’ 及以上的基础库增加了对未填写的兼容(未填写时兼容为填写 null),但更低版本的基础库无法处理未填写的情况,最坏可能会使页面无法正常渲染,请注意兼容。

示例代码

Component({
  properties: {
    min: {
      type: Number,
      value: 0
    },
    max: {
      type: Number,
      value: 0,
      observer: function(newVal, oldVal) {
        // 属性值变化时执行
      }
    },
    lastLeaf: {
      // 这个属性可以是 Number 、 String 、 Boolean 三种类型中的一种
      type: Number,
      optionalTypes: [String, Object],
      value: 0
    }
  }
})

属性的类型可以为 String Number Boolean Object Array 其一,也可以为 null 表示不限制类型。

多数情况下,属性最好指定一个确切的类型。这样,在 WXML 中以字面量指定属性值时,值可以获得一个确切的类型,如:

<custom-comp min="1" max="5" />

此时,由于自定义组件的对应属性被规定为 Number 类型, minmax 会被赋值为 15 ,而非 "1""5" ,即:

this.data.min === 1 // true
this.data.max === 5 // true

Bug & Tip

  • 使用 this.data 可以获取内部数据和属性值;但直接修改它不会将变更应用到界面上,应使用 setData 修改。
  • 生命周期函数无法在组件方法中通过 this 访问到。
  • 属性名应避免以 data 开头,即不要命名成 dataXyz 这样的形式,因为在 WXML 中, data-xyz="" 会被作为节点 dataset 来处理,而不是组件属性。
  • 在一个组件的定义和使用时,组件的属性名和 data 字段相互间都不能冲突(尽管它们位于不同的定义段中)。
  • 从基础库 ‘2.0.9’ 开始,对象类型的属性和 data 字段中可以包含函数类型的子字段,即可以通过对象类型的属性字段来传递函数。低于这一版本的基础库不支持这一特性。
  • bug : 位于 slot 中的自定义组件没有触发 pageLifetimes 中声明的页面生命周期,此问题在 ‘2.5.2’ 中修复。
  • bug : 对于 type 为 Object 或 Array 的属性,如果通过该组件自身的 this.setData 来改变属性值的一个子字段,则依旧会触发属性 observer ,且 observer 接收到的 newVal 是变化的那个子字段的值, oldVal 为空, changedPath 包含子字段的字段名相关信息;目前推荐使用 observers 定义段代替。

Router

基础库 ‘2.16.1’ 开始支持,低版本需做兼容处理

页面路由器对象。可以通过 this.pageRouterthis.router 获得当前页面或自定义组件的路由器对象。

路由的相对路径

页面路由器有 switchTab reLaunch redirectTo navigateTo navigateBack 五个方法,与 wx 对象向同名的五个方法 switchTab reLaunch redirectTo navigateTo navigateBack 功能相同;唯一的区别是,页面路由器中的方法调用时,相对路径永远相对于 this 指代的页面或自定义组件。

例如,对于下面这段示例代码:

// index/index.js
Page({
  wxNavAction: function () {
    wx.navigateTo({
      url: './new-page'
    })
  },
  routerNavAction: function () {
    this.pageRouter.navigateTo({
      url: './new-page'
    })
  }
})

页面 index/index 的 js 代码如上所示。如果此时已经跳转到了一个新页面 pack/index ,然后才调用到上面的 wxNavAction 方法,跳转的新页面路径将是 pack/new-page ;而如果调用的是 routerNavAction 方法,跳转的新页面路径仍然是 index/new-page

换而言之, this.pageRouter 获得的路由器对象具有更好的基路径稳定性。通常情况下,使用 this.pageRouter.navigateTo 代替 wx.navigateTo 是更优的。

相对于自定义组件路径的路由

this.pageRouterthis.router 在页面中将获得同样的页面路由器对象。

但如果在自定义组件中调用, this.pageRouter 将相对于自定义组件所在的页面来进行路由跳转,而 this.router 相对于自定义组件自身的路径。

getCurrentPages()

获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页面。

注意事项

  • 不要尝试修改页面栈,否则会导致路由以及页面状态错误。
  • 不要在 App.onLaunch 的时候调用 getCurrentPages(),因为此时 page 还没有生成。

插件用户隐私保护说明内容介绍

微信插件用户隐私保护说明包括下列板块,其中具体的说明仅为示例。

插件基本信息

包括插件名称、插件提供方名称。

  插件名称:客服助手
  插件提供方名称: 深圳市腾讯计算机系统有限公司

插件处理的信息

开发者需在此板块声明所处理的用户信息,微信小程序会根据插件版本隐私接口调用情况展示必填项,开发者可自主勾选其他项目。

  - 开发者收集你选中的照片或视频信息,用于在客服会话中发送图片或视频类型的聊天内容。
  - 为了发送语音类型的聊天内容,开发者将在获取你的明示同意后,访问你的麦克风。

隐私接口与对应的处理的信息关系如下:

处理的信息 接口或组件
收集你的昵称、头像 <button open-type="chooseAvatar"><input type="nickname"><functional-page-navigator name="loginAndGetUserInfo">、wx.getUserInfo (已回收)
收集你的位置信息 wx.authorizeForMiniProgram({scope:’scope.userLocation’})、wx.getLocation、wx.startLocationUpdate、wx.getFuzzyLocation
收集你选择的位置信息 wx.choosePoi、wx.chooseLocation
收集你的地址 wx.chooseAddress
收集你的发票信息 wx.chooseInvoiceTitle、wx.chooseInvoice
收集你选中的照片或视频信息 wx.chooseImage、wx.chooseMedia、wx.chooseVideo
访问你的麦克风 wx.authorizeForMiniProgram({scope: ‘scope.record’})、wx.startRecord、RecorderManager.start、<live-pusher>、wx.joinVoIPChat
访问你的摄像头 wx.authorizeForMiniProgram({scope: ‘scope.camera’})、wx.createVKSession、<camera><live-pusher><voip-room>
访问你的蓝牙 wx.openBluetoothAdapter、wx.createBLEPeripheralServer
使用你的相册(仅写入)权限 wx.authorizeForMiniProgram({scope: ‘scope.writePhotosAlbum’})、wx.saveImageToPhotosAlbum、wx.saveVideoToPhotosAlbum
使用你的通讯录(仅写入)权限 wx.addPhoneContact
调用你的加速传感器 wx.startAccelerometer
调用你的磁场传感器 wx.startCompass
调用你的方向传感器 wx.startDeviceMotionListening
调用你的陀螺仪传感器 wx.startGyroscope
读取你的剪切板 wx.setClipboardData、wx.getClipboardData

Page(Object object)

注册微信小程序中的一个页面。接受一个 Object 类型参数,用于指定页面的初始数据、生命周期回调、事件处理函数等。

参数

Object object

属性 类型 默认值 必填 说明
data Object 页面的初始数据
options Object 页面的组件选项,同 Component 构造器 中的 options ,需要基础库版本 ‘2.10.1’
behaviors String Array 类似于 mixins 和 traits 的组件间代码复用机制,参见 behaviors,需要基础库版本 ‘2.9.2’
onLoad function 生命周期回调—监听页面加载
onShow function 生命周期回调—监听页面显示
onReady function 生命周期回调—监听页面初次渲染完成
onHide function 生命周期回调—监听页面隐藏
onUnload function 生命周期回调—监听页面卸载
onRouteDone function 生命周期回调—监听路由动画完成
onPullDownRefresh function 监听用户下拉动作
onReachBottom function 页面上拉触底事件的处理函数
onShareAppMessage function 用户点击右上角转发
onShareTimeline function 用户点击右上角转发到朋友圈
onAddToFavorites function 用户点击右上角收藏
onPageScroll function 页面滚动触发事件的处理函数
onResize function 页面尺寸改变时触发,详见 响应显示区域变化
onTabItemTap function 当前是 tab 页时,点击 tab 时触发
onSaveExitState function 页面销毁前保留状态回调
其他 any 开发者可以添加任意的函数或数据到 Object 参数中,在页面的函数中用 this 可以访问。这部分属性会在页面实例创建时进行一次深拷贝

示例代码

//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.
  },
  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
  },
  onResize: function() {
    // Do something when page resize
  },
  onTabItemTap(item) {
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  },
  // Event handler.
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    }, function() {
      // this is setData callback
    })
  },
  customData: {
    hi: 'MINA'
  }
})

data

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

页面加载时,data 会以 JSON 字符串的形式从逻辑层传到渲染层,所以 data 中的数据必须是能转成 JSON 的类型:字符串、数字、布尔值、对象、数组。

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

示例代码:

在开发者工具中预览效果

<view>{{text}}</view>
<view>{{array[0].msg}}</view>
Page({
  data: {
    text: 'init data',
    array: [{msg: '1'}, {msg: '2'}]
  }
})

生命周期回调函数

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

onLoad(Object query)

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

参数:

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

onShow()

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

onReady()

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

注意:对界面内容进行设置的 API 如 wx.setNavigationBarTitle,请在 onReady 之后进行。详见生命周期

onHide()

页面隐藏或切入后台时触发。例如使用 wx.navigateTo 或底部 tab 切换到其他页面,微信小程序切入后台等。

onUnload()

页面卸载时触发。例如使用 wx.redirectTo 或 wx.navigateBack 切换到其他页面时。

onRouteDone()

路由动画完成时触发。例如 wx.navigateTo 页面完全推入后,或 wx.navigateBack 页面完全恢复时。

页面事件处理函数

onPullDownRefresh()

监听用户下拉刷新事件。

  • 需要在 app.jsonwindow 选项中或页面配置中开启 enablePullDownRefresh
  • 可以通过 wx.startPullDownRefresh 触发下拉刷新,调用后会触发下拉刷新动画,效果与用户手动下拉刷新一致。
  • 当处理完数据刷新后,wx.stopPullDownRefresh 可以停止当前页面的下拉刷新。

onReachBottom()

监听用户上拉触底事件。

  • 可以在 app.jsonwindow 选项中或页面配置中设置触发距离 onReachBottomDistance
  • 在触发距离内滑动期间,本事件只会被触发一次。

onPageScroll(Object object)

监听用户滑动页面事件。

参数 Object object:

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

注意:请只在需要的时候才在 page 中定义此方法,不要定义空方法。以减少不必要的事件派发对渲染层-逻辑层通信的影响。 注意:请避免在 onPageScroll 中过于频繁的执行 setData 等引起逻辑层-渲染层通信的操作。尤其是每次传输大量数据,会影响通信耗时。

onAddToFavorites(Object object)

本接口为 Beta 版本,安卓 7.0.15 版本起支持,暂只在安卓平台支持

监听用户点击右上角菜单“收藏”按钮的行为,并自定义收藏内容。

参数 Object object:

参数 类型 说明
webViewUrl String 页面中包含web-view组件时,返回当前web-view的url

此事件处理函数需要 return 一个 Object,用于自定义收藏内容:

字段 说明 默认值
title 自定义标题 页面标题或账号名称
imageUrl 自定义图片,显示图片长宽比为 1:1 页面截图
query 自定义query字段 当前页面的query

示例代码

Page({
  onAddToFavorites(res) {
    // webview 页面返回 webViewUrl
    console.log('webViewUrl: ', res.webViewUrl)
    return {
      title: '自定义标题',
      imageUrl: 'http://demo.png',
      query: 'name=xxx&age=xxx',
    }
  }
})

onShareAppMessage(Object object)

监听用户点击页面内转发按钮(button 组件 open-type="share")或右上角菜单“转发”按钮的行为,并自定义转发内容。

注意:只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮

参数 Object object:

参数 类型 说明 最低版本
from String 转发事件来源。
button:页面内转发按钮;
menu:右上角转发菜单
‘1.2.4’
target Object 如果 from 值是 button,则 target 是触发这次转发事件的 button,否则为 undefined ‘1.2.4’
webViewUrl String 页面中包含web-view组件时,返回当前web-view的url ‘1.6.4’

此事件处理函数需要 return 一个 Object,用于自定义转发内容,返回内容如下:

自定义转发内容 基础库 ‘2.8.1’ 起,分享图支持云图片。

字段 说明 默认值 最低版本
title 转发标题 当前微信小程序名称
path 转发路径 当前页面 path ,必须是以 / 开头的完整路径
imageUrl 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持PNG及JPG。显示图片长宽比是 5:4。 使用默认截图 ‘1.5.0’
promise 如果该参数存在,则以 resolve 结果为准,如果三秒内不 resolve,分享会使用上面传入的默认参数 ‘2.12.0’

示例代码

在开发者工具中预览效果

Page({
  onShareAppMessage() {
    const promise = new Promise(resolve => {
      setTimeout(() => {
        resolve({
          title: '自定义转发标题'
        })
      }, 2000)
    })
    return {
      title: '自定义转发标题',
      path: '/page/user?id=123',
      promise 
    }
  }
})

onShareTimeline()

基础库 ‘2.11.3’ 开始支持,低版本需做兼容处理

详见分享到朋友圈

监听右上角菜单“分享到朋友圈”按钮的行为,并自定义分享内容。

注意:只有定义了此事件处理函数,右上角菜单才会显示“分享到朋友圈”按钮

自定义转发内容

事件处理函数返回一个 Object,用于自定义分享内容,不支持自定义页面路径,返回内容如下:

字段 说明 默认值 最低版本
title 自定义标题,即朋友圈列表页上显示的标题 当前微信小程序名称
query 自定义页面路径中携带的参数,如 path?a=1&b=2 的 “?” 后面部分 当前页面路径携带的参数
imageUrl 自定义图片路径,可以是本地文件或者网络图片。支持 PNG 及 JPG,显示图片长宽比是 1:1。 默认使用微信小程序 Logo
promise 如果该参数存在,则以 resolve 结果为准,如果三秒内不 resolve,分享会使用上面传入的默认参数 ‘3.12.0’

示例代码

Page({
  onShareTimeline() {
    const promise = new Promise(resolve => {
      setTimeout(() => {
        resolve({
          title: '自定义转发标题'
        })
      }, 2000)
    })
    return {
      title: '自定义转发标题',
      query: 'id=123',
      imageUrl: '/images/share.png',
      promise
    }
  }
})

onResize(Object object)

基础库 ‘2.4.0’ 开始支持,低版本需做兼容处理

页面尺寸改变时触发。详见 响应显示区域变化

onTabItemTap(Object object)

基础库 ‘1.9.0’ 开始支持,低版本需做兼容处理

点击 tab 时触发

Object 参数说明:

参数 类型 说明 最低版本
index String 被点击tabItem的序号,从0开始 ‘1.9.0’
pagePath String 被点击tabItem的页面路径 ‘1.9.0’
text String 被点击tabItem的按钮文字 ‘1.9.0’

示例代码:

Page({
  onTabItemTap(item) {
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  }
})

onSaveExitState()

基础库 ‘2.7.4’ 开始支持,低版本需做兼容处理

每当微信小程序可能被销毁之前,页面回调函数 onSaveExitState 会被调用,可以进行退出状态的保存。

组件事件处理函数

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

示例代码:

在开发者工具中预览效果

<view bindtap="viewTap"> click me </view>
Page({
  viewTap: function() {
    console.log('view tap')
  }
})

Page.route

基础库 ‘1.2.0’ 开始支持,低版本需做兼容处理

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

Page({
  onShow: function() {
    console.log(this.route)
  }
})

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

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

参数说明

字段 类型 必填 描述 最低版本
data Object 这次要改变的数据
callback Function setData引起的界面更新渲染完毕后的回调函数 ‘1.5.0’

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

其中 key 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如 array[2].messagea.b.c.d,并且不需要在 this.data 中预先定义。

注意:

  1. 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致
  2. 仅支持设置可 JSON 化的数据。
  3. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
  4. 请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。

示例代码:

在开发者工具中预览效果

<!--index.wxml-->
<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' // 不要直接修改 this.data
    // 应该使用 setData
    this.setData({
      text: 'changed data'
    })
  },
  changeNum: function() {
    // 或者,可以修改 this.data 之后马上用 setData 设置一下修改了的字段
    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'
    })
  }
})

页面间通信

基础库 ‘2.7.3’ 开始支持,低版本需做兼容处理

如果一个页面由另一个页面通过 wx.navigateTo 打开,这两个页面间将建立一条数据通道:

  • 被打开的页面可以通过 this.getOpenerEventChannel() 方法来获得一个 EventChannel 对象;
  • wx.navigateTosuccess 回调中也包含一个 EventChannel 对象。

这两个 EventChannel 对象间可以使用 emiton 方法相互发送、监听事件。

在开发者工具中预览效果

获取应用实例对象

获取到微信小程序全局唯一的 App 实例。

参数

Object object

属性 类型 默认值 必填 说明 最低版本
allowDefault boolean false App 未定义时返回默认实现。当App被调用时,默认实现中定义的属性会被覆盖合并到App中。一般用于独立分包 ‘2.2.4’

示例代码

// other.js
var appInstance = getApp()
console.log(appInstance.globalData) // I am global data

注意事项

  • 不要在定义于 App() 内的函数中,或调用 App 前调用 getApp() ,使用 this 就可以拿到 app 实例。
  • 通过 getApp() 获取实例之后,不要私自调用生命周期函数。