uniapp中常用的事件處理方法詳解
前言
UniApp 是一個(gè)跨平臺(tái)的開發(fā)框架,支持多種前端框架(Vue、React、Angular 等),并能打包成多種運(yùn)行平臺(tái)(H5、小程序、App 等)。在 UniApp 中,事件處理非常重要,通過事件處理可以實(shí)現(xiàn)用戶與應(yīng)用程序之間的交互。下面是 UniApp 中常用的事件處理方式:
1. 綁定事件
在模板中可以通過 @ 符號(hào)綁定事件,例如:
<button @click="handleClick">點(diǎn)擊我</button> 這里綁定了一個(gè) click 事件,并且綁定的函數(shù)是 handleClick。
2. 事件修飾符
事件修飾符是指在綁定事件時(shí)使用的一些特殊符號(hào),用于修改事件的行為。常見的事件修飾符包括:
- prevent:阻止默認(rèn)行為
- stop:阻止事件冒泡
- capture:使用事件捕獲模式
- self:只有當(dāng)事件是從事件源本身觸發(fā)時(shí)才觸發(fā)回調(diào)函數(shù)
- once:只觸發(fā)一次回調(diào)函數(shù)
- passive:提高頁面滾動(dòng)的流暢度
例如:
<!-- 阻止默認(rèn)行為 --> <button @click.prevent="handleClick">點(diǎn)擊我</button> <!-- 阻止事件冒泡 --> <button @click.stop="handleClick">點(diǎn)擊我</button> <!-- 使用事件捕獲模式 --> <button @click.capture="handleClick">點(diǎn)擊我</button> <!-- 只有當(dāng)事件是從事件源本身觸發(fā)時(shí)才觸發(fā)回調(diào)函數(shù) --> <button @click.self="handleClick">點(diǎn)擊我</button> <!-- 只觸發(fā)一次回調(diào)函數(shù) --> <button @click.once="handleClick">點(diǎn)擊我</button> <!-- 提高頁面滾動(dòng)的流暢度 --> <button @click.passive="handleClick">點(diǎn)擊我</button>
.prevent 和 .stop 是兩種不同的事件修飾符,雖然它們有一些相似之處,但是在事件處理中有不同的作用。
1 .prevent 用于阻止事件的默認(rèn)行為,例如阻止 <a> 標(biāo)簽的默認(rèn)跳轉(zhuǎn)、阻止表單的默認(rèn)提交等。
如果一個(gè)事件被 .prevent 修飾符修飾了,則在事件觸發(fā)時(shí),不會(huì)執(zhí)行事件的默認(rèn)行為,而只會(huì)執(zhí)行`綁定的事件處理函數(shù)`。2 .stop 用于阻止事件的冒泡傳播,事件冒泡是指當(dāng)一個(gè)元素觸發(fā)事件時(shí),該事件會(huì)向父級(jí)元素傳播。
如果一個(gè)事件被 .stop 修飾符修飾了,則在事件觸發(fā)時(shí),不會(huì)向上層元素傳播該事件,而只會(huì)在當(dāng)前元素內(nèi)部進(jìn)行處理。因此,.prevent 和 .stop 的作用是不同的,但是它們都能夠阻止事件的默認(rèn)行為。
.prevent 用于阻止元素的默認(rèn)行為,.stop 用于阻止事件的冒泡傳播。
具體示例: 當(dāng)一個(gè)鏈接被點(diǎn)擊時(shí),會(huì)觸發(fā) click 事件。如果鏈接沒有設(shè)置 href 屬性,則默認(rèn)的行為是不進(jìn)行跳轉(zhuǎn), 但如果設(shè)置了 href 屬性,則會(huì)跳轉(zhuǎn)到 href 指定的頁面。 在這種情況下,可以使用 .prevent 和 .stop 修飾符來阻止鏈接的默認(rèn)跳轉(zhuǎn)行為和冒泡傳播。 我們給鏈接設(shè)置了 href 屬性,并綁定了 click 事件和 handleLinkClick 方法。 同時(shí),我們?cè)阪溄由鲜褂昧?.prevent 和 .stop 修飾符來阻止默認(rèn)的跳轉(zhuǎn)行為和冒泡傳播。 <template> <div @click="handleDivClick">//上層點(diǎn)擊事件。用了檢測(cè)下面的點(diǎn)擊事件有沒有冒泡上來 <a rel="external nofollow" @click.prevent.stop="handleLinkClick">點(diǎn)擊我</a> </div> </template> <script> export default { methods: { handleLinkClick() { console.log('內(nèi)部事件————鏈接被點(diǎn)擊了'); }, handleDivClick() { console.log('外部事件————div 被點(diǎn)擊了'); } } }; </script> 在點(diǎn)擊鏈接時(shí),控制臺(tái)會(huì)輸出 【內(nèi)部事件————鏈接被點(diǎn)擊了】 鏈接被點(diǎn)擊了,而不會(huì)進(jìn)行跳轉(zhuǎn)。 同時(shí),由于使用了 .stop 修飾符,事件也不會(huì)向上層元素冒泡傳播,因此點(diǎn)擊鏈接時(shí)不會(huì)觸發(fā)外部事件 handleDivClick 方法。 1、如果我們把 .prevent 修飾符去掉,點(diǎn)擊鏈接時(shí)會(huì)進(jìn)行跳轉(zhuǎn)。說明默認(rèn)行為存在,但是被阻止了。 2、如果把 .stop 修飾符去掉,點(diǎn)擊鏈接時(shí)會(huì)觸發(fā) handleDivClick 方法。說明點(diǎn)擊事件冒泡了。 這說明了 .prevent 和 .stop 修飾符的區(qū)別,.prevent 可以阻止默認(rèn)行為,.stop 可以阻止冒泡傳播。 默認(rèn)行為指的是元素在觸發(fā)某些事件時(shí),瀏覽器會(huì)執(zhí)行的預(yù)設(shè)行為。 例如,當(dāng)用戶點(diǎn)擊一個(gè)鏈接時(shí),瀏覽器默認(rèn)會(huì)跳轉(zhuǎn)到該鏈接所指定的 URL。當(dāng)用戶提交一個(gè)表單時(shí),瀏覽器默認(rèn)會(huì)向服務(wù)器發(fā)送表單數(shù)據(jù)并刷新頁面。 這些行為是瀏覽器內(nèi)置的,可以通過 JavaScript 代碼來阻止或修改。
3. 內(nèi)置事件
在 UniApp 中,還有一些內(nèi)置事件可以使用。這些事件是指在特定情況下自動(dòng)觸發(fā)的事件,例如:
- onLoad:頁面加載完成時(shí)觸發(fā)
- onReady:頁面初次渲染完成時(shí)觸發(fā)
- onShow:頁面展示時(shí)觸發(fā)
- onHide:頁面隱藏時(shí)觸發(fā)
- onUnload:頁面卸載時(shí)觸發(fā)
這些事件可以在頁面或組件中使用,例如:
export default { onLoad() { console.log('頁面加載完成'); }, onReady() { console.log('頁面初次渲染完成'); }, onShow() { console.log('頁面展示'); }, onHide() { console.log('頁面隱藏'); }, onUnload() { console.log('頁面卸載'); } }
4. 自定義事件
在 UniApp 中,還可以通過 uni. e m i t 和 u n i . emit 和 uni. emit和uni.on 方法來實(shí)現(xiàn)自定義事件的處理。例如:
// 發(fā)送自定義事件 uni.$emit('myEvent', {data: '自定義事件參數(shù)'}); // 監(jiān)聽自定義事件 uni.$on('myEvent', (data) => { console.log('接收到自定義事件', data); }); 這里通過 uni.$emit 發(fā)送了一個(gè)名為 myEvent 的自定義事件, 并傳遞了一個(gè)參數(shù) {data: '自定義事件參數(shù)'}。在需要監(jiān)聽該事件的地方, 可以使用 uni.$on 方法來監(jiān)聽該事件,并在回調(diào)函數(shù)中處理事件。
5. 事件對(duì)象
在事件處理函數(shù)中,可以通過 $event 參數(shù)來獲取事件對(duì)象,事件對(duì)象包含了事件的一些信息,例如:
- type:事件類型
- target:事件源
- currentTarget:當(dāng)前組件
- detail:自定義數(shù)據(jù)
例如:
<button @click="handleClick">點(diǎn)擊我</button> methods: { handleClick($event) { console.log('事件類型', $event.type); console.log('事件源', $event.target); console.log('當(dāng)前組件', $event.currentTarget); console.log('自定義數(shù)據(jù)', $event.detail); } }
以上就是 UniApp 中常用的事件處理方式,包括綁定事件、事件修飾符、內(nèi)置事件、自定義事件和事件對(duì)象。
掌握這些知識(shí),可以更加靈活地處理事件,實(shí)現(xiàn)豐富的用戶交互效果。
總結(jié)
到此這篇關(guān)于uniapp中常用的事件處理方法的文章就介紹到這了,更多相關(guān)uniapp事件處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Auto.js?調(diào)用系統(tǒng)短信、電話模塊實(shí)現(xiàn)功能
這篇文章主要介紹了如何使用Auto.js調(diào)用系統(tǒng)短信與電話模塊,并實(shí)現(xiàn)讀取短信與聯(lián)系人的功能,并給出了實(shí)現(xiàn)相應(yīng)功能的代碼2023-03-03hash特點(diǎn)、hashchange事件介紹及其常見應(yīng)用場(chǎng)景
淺析hash特點(diǎn)、hashchange事件介紹及其常見應(yīng)用場(chǎng)景(不同hash對(duì)應(yīng)不同事件處理、移動(dòng)端大圖展示狀態(tài)后退頁面問題、原生輕應(yīng)用頭部后退問題、移動(dòng)端自帶返回按鈕二次確認(rèn)問題),hashchange和popstate事件觸發(fā)條件2023-11-11JavaScript基礎(chǔ)之AJAX簡(jiǎn)單的小demo
這篇文章主要介紹了JavaScript基礎(chǔ)之AJAX簡(jiǎn)單的小demo ,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01遨游,飛飛,IE,空中網(wǎng) 瀏覽器無提示關(guān)閉方法
遨游,飛飛,IE,空中網(wǎng) 瀏覽器無提示關(guān)閉方法,需要的朋友可以參考下。2011-07-07淺談js中Object.create()與new的具體實(shí)現(xiàn)與區(qū)別
本文主要介紹了js中Object.create()與new的具體實(shí)現(xiàn)與區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03uniapp開發(fā)小程序?qū)崿F(xiàn)滑動(dòng)頁面控制元素的顯示和隱藏效果
這篇文章主要介紹了uniapp開發(fā)小程序?qū)崿F(xiàn)滑動(dòng)頁面控制元素的顯示和隱藏效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Javascript實(shí)現(xiàn)登錄記住用戶名和密碼功能
本文主要介紹了Javascript實(shí)現(xiàn)登錄記住用戶名和密碼功能的代碼。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03js 簡(jiǎn)易版滾動(dòng)條實(shí)例(適用于移動(dòng)端H5開發(fā))
下面小編就為大家?guī)硪黄猨s 簡(jiǎn)易版滾動(dòng)條實(shí)例(適用于移動(dòng)端H5開發(fā))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06