组件间通信与事件

    • WXML 数据绑定:用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容数据(自基础库版本 开始,还可以在数据中包含函数)。具体在 组件模板和样式 章节中介绍。
    • 事件:用于子组件向父组件传递数据,可以传递任意数据。
    • 如果以上两种方式不足以满足需要,父组件还可以通过 方法获取子组件实例对象,这样就可以直接访问组件的任意数据和方法。

    事件系统是组件间通信的主要方式之一。自定义组件可以触发任意的事件,引用组件的页面可以监听这些事件。关于事件的基本概念和用法,参见 。

    监听自定义组件事件的方法与监听基础组件事件的方法完全一致:

    1. Page({
    2. onMyEvent: function(e){
    3. e.detail // 自定义组件触发事件时提供的detail对象
    4. }
    5. })

    自定义组件触发事件时,需要使用 triggerEvent 方法,指定事件名、detail对象和事件选项:

    代码示例:

    1. properties: {},
    2. methods: {
    3. var myEventDetail = {} // detail对象,提供给事件监听函数
    4. var myEventOption = {} // 触发事件的选项
    5. this.triggerEvent('myevent', myEventDetail, myEventOption)
    6. }
    7. }
    8. })

    触发事件的选项包括:

    关于冒泡和捕获阶段的概念,请阅读 事件 章节中的相关说明。

    1. // 组件 another-component.wxml
    2. <view bindcustomevent="anotherEventListener">
    1. // 组件 my-component.js
    2. Component({
    3. methods: {
    4. onTap: function(){
    5. this.triggerEvent('customevent', {}) // 只会触发 pageEventListener2
    6. this.triggerEvent('customevent', {}, { bubbles: true }) // 会依次触发 pageEventListener2 、 pageEventListener1
    7. this.triggerEvent('customevent', {}, { bubbles: true, composed: true }) // 会依次触发 pageEventListener2 、 anotherEventListener 、 pageEventListener1
    8. }
    9. }