W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
組件間的基本通信方式有以下幾種:
解釋:
事件系統(tǒng)是組件間通信的主要方式之一。自定義組件可以觸發(fā)任意的事件,引用組件的頁面可以監(jiān)聽這些事件。
監(jiān)聽自定義組件事件的方法與監(jiān)聽基礎(chǔ)組件事件的方法完全一致。
代碼示例
<!-- 父組件模板 -->
<component-tag-name bindmyevent="onMyEvent" />
通過 dispatch 方法,子組件可以向組件樹的上層派發(fā)消息。消息將沿著組件樹向上傳遞,直到遇到第一個(gè)處理該消息的組件,則停止。
通過 messages 可以聲明組件要處理的消息,messages 是一個(gè)對(duì)象,key 是消息名稱,value 是消息處理的函數(shù),接收一個(gè)包含 target(派發(fā)消息的組件) 和 value(消息的值) 的參數(shù)對(duì)象。
代碼示例
在開發(fā)者工具中打開/* 父組件邏輯 */
Component({
messages: {
'childmessage': function (e) {
console.log('childmessage', e);
}
}
});
/* 子組件邏輯 */
Component({
created() {
this.dispatch('childmessage', {
name: 'swan'
});
}
});
解釋:
自定義組件觸發(fā)事件時(shí),需要使用 triggerEvent 方法,指定事件名和 detail 對(duì)象:
<button bindtap="onTap">點(diǎn)擊這個(gè)按鈕將觸發(fā) myevent 事件</button>
代碼示例
在開發(fā)者工具中打開/* 組件child頁面 */
<button bindtap="onTap">點(diǎn)擊這個(gè)按鈕將觸發(fā) myevent 事件</button>
/* 組件child邏輯 */
Component({
properties: {},
methods: {
onTap: function() {
var myEventDetail = {} // detail對(duì)象,提供給事件監(jiān)聽函數(shù)
var myEventOption = {bubbles:true} // 觸發(fā)事件的選項(xiàng)
this.triggerEvent('myevent', myEventDetail, myEventOption);
}
}
});
/* 使用該組件的頁面 */
<child bindmyevent="listener"></child>
/* 使用該組件的邏輯 */
Page({
listener: function (e) {
console.log(e);
}
})
觸發(fā)事件的選項(xiàng)包括:
選項(xiàng)名 | 類型 | 是否必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
bubbles | Boolean | 否 | false | 事件是否冒泡 |
capturePhase | Bollean | 否 | false | 事件是否擁有捕獲階段 |
關(guān)于自定義組件的冒泡和捕獲階段。
代碼示例
<!-- 頁面 index.swan -->
<parent bindcustomevent="pageEventListener1">
<child bindcustomevent="pageEventListener2"></child>
</parent>
<!-- 組件 parent.swan -->
<view bindcustomevent="anotherEventListener">
<slot />
</view>
<!-- 組件 child.swan -->
<view bindcustomevent="myEventListener">
<button bindtap="onTap">點(diǎn)我觸發(fā)</button>
</view>
// 組件 child.js
Component({
methods: {
onTap: function(){
this.triggerEvent('customevent', {}) // 只會(huì)觸發(fā) pageEventListener2
// this.triggerEvent('customevent', {}, { bubbles: true }) // 會(huì)依次觸發(fā) pageEventListener2 、 pageEventListener1
// this.triggerEvent('customevent', {}, { bubbles: true, capturePhase: true }) // 會(huì)依次觸發(fā) pageEventListener2 、 anotherEventListener 、 pageEventListener1
}
}
})
注意:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: