tencent cloud

文档反馈

组件事件

最后更新时间:2024-03-04 23:07:33

    组件间通信

    组件间的基本通信方式有以下几种。
    WXML 数据绑定:用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容数据开始,还可以在数据中包含函数。详情请参见 组件模板和样式
    事件:用于子组件向父组件传递数据,可以传递任意数据。
    如果以上两种方式不足以满足需要,父组件还可以通过 this.selectComponent 方法获取子组件实例对象,即可直接访问组件的任意数据和方法。

    监听事件

    事件系统是组件间通信的主要方式之一。自定义组件可以触发任意的事件,引用组件的页面可以监听这些事件。关于事件的基本概念和用法,参见 WXML - 事件
    监听自定义组件事件的方法与监听基础组件事件的方法完全一致。
    代码示例:
    <!-- 当自定义组件触发“myevent”事件时,调用“onMyEvent”方法 -->
    <component-tag-name bindmyevent="onMyEvent" />
    <!-- 或者可以写成 -->
    <component-tag-name bind:myevent="onMyEvent" />
    Page({
    onMyEvent(e) {
    e.detail // 自定义组件触发事件时提供的detail对象
    }
    })

    触发事件

    自定义组件触发事件时,需要使用 triggerEvent 方法,指定事件名、detail 对象和事件选项:
    <!-- 在自定义组件中 -->
    <button bindtap="onTap">点击这个按钮将触发“myevent”事件</button>
    Component({
    properties: {},
    methods: {
    onTap() {
    const myEventDetail = {} // detail对象,提供给事件监听函数
    const myEventOption = {} // 触发事件的选项
    this.triggerEvent('myevent', myEventDetail, myEventOption)
    }
    }
    })
    触发事件的选项包括:
    选项名
    类型
    是否必填
    默认值
    描述
    bubbles
    Boolean
    false
    事件是否冒泡
    composed
    Boolean
    false
    事件是否可以穿越组件边界,为 false 时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部
    capturePhase
    Boolean
    false
    事件是否拥有捕获阶段
    关于冒泡和捕获阶段的概念,请阅读参见 WXML - 事件 章节中的相关说明。
    // 页面 page.wxml
    <another-component bindcustomevent="pageEventListener1">
    <my-component bindcustomevent="pageEventListener2"></my-component>
    </another-component>
    // 组件 another-component.wxml
    <view bindcustomevent="anotherEventListener">
    <slot />
    </view>
    // 组件 my-component.wxml
    <view bindcustomevent="myEventListener">
    <slot />
    </view>
    // 组件 my-component.js
    Component({
    methods: {
    onTap() {
    this.triggerEvent('customevent', {}) // 只会触发 pageEventListener2
    this.triggerEvent('customevent', {}, {bubbles: true}) // 会依次触发 pageEventListener2 、 pageEventListener1
    this.triggerEvent('customevent', {}, {bubbles: true, composed: true}) // 会依次触发 pageEventListener2 、 anotherEventListener 、 pageEventListener1
    }
    }
    })
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持