uniapp的$emit,$on,$once,$off的簡單使用


場景:用戶點外賣要改地址,訂單頁-->地址選擇頁-->更改地址-->返回訂單頁-->地址改變了

【 訂單頁:】
onUnload(){
    uni.$off('selectAddress')  //在此生命周期里銷毀地址改變事件的監聽
}

methods:{
    changeAddress(){  //點擊切換地址按鈕觸發此函數
          uni.$on('selectAddress',(info)=>{  //開啟監聽全局的地址改變事件
                this.address=info.address
          })
          uni.navigateTo({  //跳轉至選擇地址頁面
                url:'/pages/user-info/info-address/info-address'
          })
    }
}

【 地址選擇頁:】
methods:{
    handleSelect(data){
          uni.$emit('selectAddress',{  //選擇地址完成后,觸發全局的地址改變事件,並傳遞參數給監聽器即uni.$on。此時在訂單頁的uni.$on中,已經拿到了數據並將地址賦值給了address變量
                address: data.address,
                phone: data.phone,
                name: data.name
          })
    }
}


注:
1、$off提供的回調必須跟$on的回調為同一個才能移除這個回調的監聽器。如果只提供事件,不提供回調函數,則移除該事件所有的監聽器。所以一般建議直接uni.$off('xxx'),銷毀監聽里不使用回調,簡單粗暴好用。
2、$on監聽函數,拿數據用。$emit傳數據用。
3、如果使用了$on,請不要忘記在onUnload()生命周期里$off銷毀監聽,否則會重復監聽。(也可不在onUnload里執行銷毀,在其他地方也可)

以上只是一些簡單用法,幫助理解和使用uniapp的全局頁面通訊。如果有更深的需求。請移步至
官網介紹: https://uniapp.dcloud.io/api/window/communication
官方示例: https://ask.dcloud.net.cn/article/id-36010


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM