日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
快應用的事件監(jiān)聽機制和組件間通信

說起事件,做前端開發(fā)的朋友一定不會陌生。事件,即網(wǎng)頁上的一系列行為,可以是瀏覽器行為,如頁面完成了加載,頁面關閉;或是用戶操作行為,如用戶輸入操作,用戶點擊按鈕等,這些行為會被JavaScript監(jiān)測到,并執(zhí)行相應的邏輯代碼??梢哉f,前端的交互行為與事件機制息息相關,對于前端開發(fā)者而言,掌握好事件機制是絕對必要的。

所謂組件,即封裝起來的具有獨立功能的UI部件。試想,如果開發(fā)一個復雜的頁面,開發(fā)者把所有的UI部分寫在一個文件中,這樣的代碼顯然可維護性很低。但我們?nèi)绻媒M件的方式去重新思考UI構(gòu)成,將UI上每一個功能相對獨立的模塊定義成組件,然后將小的組件通過組合或者嵌套的方式構(gòu)成大的組件,進而完成整體UI的開發(fā)。這樣,我們不僅提高了代碼的復用性,且整體結(jié)構(gòu)清晰,維護性則大大提高。

組件化界面

本文將介紹在快應用開發(fā)中,事件相關的主要API以及事件的監(jiān)聽、觸發(fā)機制,同時會介紹快應用中組件是如何通信的。閱讀本文前,建議先了解快應用相關基礎知識。

自定義事件的監(jiān)聽、移除與觸發(fā)

$on 用于監(jiān)聽自定義事件;$off移除對應的事件監(jiān)聽;$emit()、$dispatch()、 $broadcast()等方法可用于觸發(fā)事件。

$on(evtName, fnHandler)事件

在當前頁面注冊監(jiān)聽事件, 可監(jiān)聽$emit()、 $dispatch()、 $broadcast()等觸發(fā)的自定義事件,不能用于注冊組件節(jié)點的事件響應。

示例如下:

 
 
 
  1. export default {  
  2. onInit(){  
  3. this.$on('customEvtType1', this.customEvtType1Handler)  
  4. },  
  5. customEvtType1Handler(evt){  
  6. // 事件類型,事件參數(shù)  
  7. console.info(`觸發(fā)事件:類型:${evt.type}, 參數(shù): ${JSON.stringify(evt.detail)}`);  
  8. }  

解釋一下

'customEvtType1'為該組件上自定義的事件名稱,customEvtType1Handler為當'customEvtType1'事件被觸發(fā)時,要執(zhí)行的回調(diào)函數(shù)。

$off(evtName, fnHandler)

移除事件監(jiān)聽,參數(shù) fnHandler 為可選,傳遞僅移除指定的響應函數(shù),不傳遞則移除此事件的所有監(jiān)聽。

示例如下:

 
 
 
  1. export default {  
  2. removeEventHandler () {  
  3. // 不傳遞fnHandler:移除所有監(jiān)聽  
  4. this.$off('customEvtType1')  
  5. // 傳遞fnHandler:移除指定的監(jiān)聽函數(shù)  
  6. this.$off('customEvtType1', this.customEvtType1Handler)  
  7. }  

頁面的交互中可能會遇到一些非手動觸發(fā)的需求,$emit() 通過觸發(fā)當前實例上的事件,達到動態(tài)觸發(fā)事件的行為,類似jquery中的trigger方法。

$emit(evtName, evtDetail)

觸發(fā)當前實例監(jiān)聽事件函數(shù),與 $on() 配合使用,注意:$emit() 目前只觸發(fā) $on 所監(jiān)聽的事件

示例如下:

 
 
 
  1. export default {  
  2. emitEvent () {  
  3. this.$emit('customEvtType1', { params: '參數(shù)內(nèi)容' })  
  4. }  

監(jiān)聽原生組件事件

原生組件即框架自帶的組件,如div,text等等,其支持一系列事件,如通用事件(如:click, disappear)、組件專有事件(如:focus)。完整的原生組件列表以及事件可在快應用官網(wǎng)查詢到。

開發(fā)者可以在事件回調(diào)函數(shù)中,獲取到當前觸發(fā)組件的信息,并進行進一步的操作。

在響應函數(shù)執(zhí)行時通過target獲取,如:onClickHandler

在響應函數(shù)綁定時傳遞參數(shù),如:onClickHandler2

示例如下:

 
 
 
  1.   
  2.   
  3. .tutorial-page {  
  4. flex-direction: column;  
  5. }  
  6.  
  7.  
  8.  

解釋一下

onClickHandler函數(shù)如果不傳參數(shù),默認參數(shù)env即為當前觸發(fā)組件的實例;若傳遞了參數(shù),如onClickHandler2,則參數(shù)安順序排列,env為***一個參數(shù)。

觸發(fā)原生組件事件

用戶可通過手動操作觸發(fā)事件,如點擊事件等,除此之外,也可以在代碼中通過$emitElement()完成事件的動態(tài)觸發(fā),類似上文自定義組件中的$emit()方法。

$emitElement(evtName, evtDetail, id)

可以觸發(fā)指定組件id的事件,通過evt.detail獲取傳遞的參數(shù);該方法僅用于原生組件,對自定義組件無效。

示例如下:

 
 
 
  1.  
  2.  
  3.   
  4. .tutorial-page {  
  5. flex-direction: column;  
  6. }  
  7.  
  8.  
  9.  

解釋一下

Click事件可通過用戶點擊操作觸發(fā),也可通過$emitElement觸發(fā)。

自定義組件

上文曾提到原生組件,通常原生組件是我們系統(tǒng)中最基礎的組件,然而我們在做一個稍微復雜的頁面時,如果每個頁面都只用原生組件搭建,那這樣的代碼的可維護性會差很多。打個比方,就好比一個人口眾多的國家,沒有省、市、縣這些單位,而是只以個人為單位,難以想象這個國家的管理將有多難。道理類似,自定義組件,我們可以根據(jù)具體的業(yè)務邏輯,把頁面按照功能拆成多個模塊,每個模塊負責其中的一個功能部分,***頁面將由這些模塊組合搭建起來,讓代碼結(jié)構(gòu)更加清晰,易于維護。

自定義組件是開發(fā)者編寫的組件,使用起來和Native原生組件一樣,最終按照組件的