uniapp頁(yè)面通訊講解之uni.$emit、uni.$on、uni.$once和uni.$off
uni.$emit(eventName,OBJECT) | 觸發(fā)全局的自定義事件。附加參數(shù)都會(huì)傳給監(jiān)聽(tīng)器回調(diào)。 |
uni.$on(eventName,callback) | 監(jiān)聽(tīng)全局的自定義事件。事件可以由 uni.$emit 觸發(fā),回調(diào)函數(shù)會(huì)接收所有傳入事件觸發(fā)函數(shù)的額外參數(shù)。 |
uni.$once(eventName,callback) | 監(jiān)聽(tīng)全局的自定義事件。事件可以由 uni.$emit 觸發(fā),但是只觸發(fā)一次,在第一次觸發(fā)之后移除監(jiān)聽(tīng)器。 |
uni.$off([eventName, callback]) | 移除全局自定義事件監(jiān)聽(tīng)器。 |
注意事項(xiàng)
- uni.$emit、 uni.$on 、 uni.$once 、uni.$off 觸發(fā)的事件都是 App 全局級(jí)別的,跨任意組件,頁(yè)面,nvue,vue 等
- 使用時(shí),注意及時(shí)銷(xiāo)毀事件監(jiān)聽(tīng),比如,頁(yè)面 onLoad 里邊 uni.$on 注冊(cè)監(jiān)聽(tīng),onUnload 里邊 uni.$off 移除,或者一次性的事件,直接使用 uni.$once 監(jiān)聽(tīng)
使用場(chǎng)景
進(jìn)入app,是未登陸狀態(tài),需要在我的頁(yè)面點(diǎn)擊登陸,進(jìn)入登陸頁(yè)面進(jìn)行登陸。登陸成功之后,返回到我的頁(yè)面,實(shí)時(shí)顯示登陸后的用戶信息。
1、在我的頁(yè)面,監(jiān)聽(tīng)事件
<template> <view class="content"> <text v-if="usnerinfo">{{usnerinfo.userName}}</text> <button v-else @click="toLogin">去登錄</button> </view> </template> <script> export default { data() { return { usnerinfo: null } }, // 我的頁(yè)面 onLoad() { // 監(jiān)聽(tīng)事件,使用 uni.$emit 觸發(fā)事件后,對(duì)應(yīng)的 uni.$on 就會(huì)監(jiān)聽(tīng)到事件觸發(fā),在回調(diào)中去執(zhí)行相關(guān)的邏輯。 uni.$on('login', (usnerinfo) => { this.usnerinfo = usnerinfo; }) }, onUnload() { // 移除監(jiān)聽(tīng)事件 uni.$off('login'); }, methods: { toLogin() { uni.navigateTo({ url: '/pages/a/a' }) }, } } </script>
因?yàn)槭录O(jiān)聽(tīng)是全局的,所以使用 uni.$on
,需要使用 uni.$off
移除全局的事件監(jiān)聽(tīng),避免重復(fù)監(jiān)聽(tīng)。
2、在登錄頁(yè),觸發(fā)事件
<template> <view class="content"> <view class="data" @click="doLogin">觸發(fā)方法,獲取用戶信息</view> </view> </template> <script> export default { data() { return { usnerinfo: null } }, // 我的頁(yè)面 onLoad() {}, methods: { doLogin() { // 登陸頁(yè)面 uni.$emit('login', { userName: 'lzzzzzzzzzzzzzzzzzzzzz', login: true }); uni.navigateBack({}) } } } </script>
使用 uni.$emit
觸發(fā)事件后,對(duì)應(yīng)的 uni.$on
就會(huì)監(jiān)聽(tīng)到事件觸發(fā),在回調(diào)中去執(zhí)行相關(guān)的邏輯。
總結(jié)
到此這篇關(guān)于uniapp頁(yè)面通訊講解之uni.$emit、uni.$on、uni.$once和uni.$off的文章就介紹到這了,更多相關(guān)uniapp uni.$emit uni.$on uni.$once uni.$off內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
小程序上傳文件至云存儲(chǔ)的實(shí)現(xiàn)
在小程序云開(kāi)發(fā)中,要實(shí)現(xiàn)上傳文件至云存儲(chǔ),有兩種方案:云函數(shù)和HTTP?API,本文主要講講如何使用HTTP?API實(shí)現(xiàn)小程序外上傳文件至云存儲(chǔ),感興趣的可以了解一下2022-01-01微信小程序?qū)崿F(xiàn)轉(zhuǎn)盤(pán)抽獎(jiǎng)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)轉(zhuǎn)盤(pán)抽獎(jiǎng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09簡(jiǎn)單的網(wǎng)頁(yè)廣告特效實(shí)例
下面小編就為大家?guī)?lái)一篇簡(jiǎn)單的網(wǎng)頁(yè)廣告特效實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08Apply an AutoFormat to an Excel Spreadsheet
Apply an AutoFormat to an Excel Spreadsheet...2007-06-06使用JS判斷移動(dòng)端手機(jī)橫豎屏狀態(tài)
本文通過(guò)js和cas代碼分別給大家介紹了移動(dòng)端判斷手機(jī)橫豎屏狀態(tài)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07JS+HTML實(shí)現(xiàn)自定義上傳圖片按鈕并顯示圖片功能的方法分析
這篇文章主要介紹了JS+HTML實(shí)現(xiàn)自定義上傳圖片按鈕并顯示圖片功能的方法,結(jié)合實(shí)例形式分析了JavaScript圖片上傳、編碼轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02