> uniapp 提供了事件的監聽注冊以及觸發,注冊的事件都是 App 全局級別的,可以很方便的跨任意組件,頁面,nvue,vue 等。
[TOC]
### 相關注冊或觸發函數
> 參考:https://uniapp.dcloud.io/api/window/communication
#### uni.$emit(eventName,OBJECT)
> 觸發全局的自定事件。附加參數都會傳給監聽器回調。
#### uni.$on(eventName,callback)
> 監聽全局的自定義事件。事件可以由 uni.$emit 觸發,回調函數會接收所有傳入事件觸發函數的額外參數。
#### uni.$once(eventName,callback)
> 監聽全局的自定義事件。事件可以由 uni.$emit 觸發,但是只觸發一次,在第一次觸發之后移除監聽器。
#### uni.$off([eventName, callback])
> 移除全局自定義事件監聽器。
### 場景案例
> 我們假設一個場景,進入app,是未登陸狀態,需要在我的頁面點擊登陸,進入登陸頁面進行登陸。登陸成功之后,返回到我的頁面,實時顯示登陸后的用戶信息。
#### 監聽事件
> 在“用戶中心“頁面 監聽事件。
> 因為事件監聽是全局的,所以使用`uni.$on`,需要使用`uni.$off`移除全局的事件監聽,避免重復監聽。
~~~
<template>
<view class="content">
<navigator url="/pages/login/index" hover-class="navigator-hover">
<button type="default">點我登錄</button>
</navigator>
<view v-if="usnerInfo !== null">
<view>
用戶token:{{usnerInfo.token}},用戶昵稱:{{usnerInfo.nickName}}
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
usnerInfo : null
}
},
onLoad() {
// 監聽事件
console.log('on login....');
uni.$on('login',(uinfo)=>{
this.usnerInfo = uinfo;
})
},
onUnload() {
// 移除監聽事件
console.log('off login....');
uni.$off('login');
},
methods: {
}
}
</script>
~~~
#### 觸發事件
> 進入登陸頁面,觸發事件
> 使用`uni.$emit`觸發事件后,對應的`uni.$on`就會監聽到事件觸發,在回調中去執行相關的邏輯。
~~~
<template>
<view>
<button type="default" @click="login">登錄</button>
</view>
</template>
<script>
export default {
data() {
return {};
},
methods: {
login() {
// 假設用戶登錄成功,此時調用emit方法觸發監聽事件,刷新用戶登錄信息
uni.$emit('login', {
token: 'user123456',
nickName: 'wk123',
});
}
}
}
</script>
~~~
### 更多使用場景
> 以上只是一個簡單的場景應用。而我們開發中會遇到很多頁面間通訊場景,如:
* vue 與 nvue,nvue 與 vue 間的通訊
* tabbar 頁面之間的通訊
* 父頁面與多級子頁面間的通訊
> 基本上述場景均可以實現,本質上就是一個頁面通知另一個面我發生了變化,你需要處理一下。絕大部分頁面的通訊都可以使用`uni.$emit`、`uni.$on`、`uni.$once`、`uni.$off`四個事件完成。
- 基礎知識
- UNI核心介紹
- flex布局
- 生命周期
- 全局方法
- 組件定義
- 自定義組件
- 全局組件
- 組件之間的數據傳輸
- 條件編譯
- 自定義頭部
- 節點信息 (SelectorQuery)
- vuejs基礎語法
- 頁面跳轉以及參數傳遞
- 事件的監聽注冊以及觸發
- css3動畫
- block的妙用
- mixin (混入)
- uniapp快捷鍵
- vuex狀態管理
- 實用功能
- 獲取服務提供商
- 啟動頁 / 啟動界面
- 引導頁
- tabbar配置
- 頭部導航欄基礎設置
- 上拉下拉(刷新/加載)
- 第三方登錄
- 第三方分享
- 推送通知 之 unipush
- scroll-view雙聯動
- 配置iOS通用鏈接(Universal Links)
- 本地緩存操作
- 升級/更新方案
- 熱更新
- 圖片上傳
- 搜索頁實現
- canvas繪圖助手
- 地圖定位
- 第三方支付————todo
- 分類輪播
- 清除應用緩存
- uniapp與webview的實時通訊
- 視頻-----todo
- 聊天----todo
- 長列表swiper左右切換
- 第三方插件
- uview
- mescroll
- uCharts (圖表)
- 無名 (更新插件)
- 第三方模版
- 自定義基座
- 打包發行
- 要封裝的方法
- 緩存 cache.js
- 請求接口 request.js
- 工具類 util.js
- 小程序登錄 xcxLogin.js
- 版本更新 update.js
- 優質插件
- 更新插件----todo
- 語音
- 語音識別 (含上傳)
- 百度語音合成播報接口
- 官方常用組建
- input 輸入框
- image 圖片
- audio 音頻
- picker 選擇器
- video 視頻
- scroll-view 滾動視圖