場景:用戶點外賣要改地址,訂單頁-->地址選擇頁-->更改地址-->返回訂單頁-->地址改變了
【 訂單頁:】
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