Vue EventBus事件偵聽($on、$emit、$off、$once)
eventBus.js
import Vue from 'vue';
export const EventBus = new Vue();
components/Parent.vue
<template>
<div>
我是父元件
<Son></Son>
</div>
</template>
<script>
/*
vm.$on( event, callback )
引數:
{string | Array<string>} event (陣列只在 2.2.0+ 中支援)
{Function} callback
用法:
監聽當前例項上的自定義事件。事件可以由 vm.$emit 觸發。回撥函式會接收所有傳入事件觸發函式的額外引數。
vm.$once( event, callback )
引數:
{string} event
{Function} callback
用法:
監聽一個自定義事件,但是隻觸發一次。一旦觸發之後,監聽器就會被移除。
vm.$off( [event, callback] )
引數:
{string | Array<string>} event (只在 2.2.2+ 支援陣列)
{Function} [callback]
用法:
移除自定義事件監聽器。
如果沒有提供引數,則移除所有的事件監聽器;
如果只提供了事件,則移除該事件所有的監聽器;
如果同時提供了事件與回撥,則只移除這個回撥的監聽器。
vm.$emit( eventName, […args] )
引數:
{string} eventName
[...args]
觸發當前例項上的事件。附加引數都會傳給監聽器回撥。
*/
import Son from '../components/Son';
import {EventBus} from '../eventBus';
export default {
components: {
Son,
},
mounted () {
//監聽grandson事件
EventBus.$on("grandson",this.handleMmsg);
},
methods: {
handleMmsg(msg) {
console.log(msg);
//移除事件監聽,故Parent只監聽一次
EventBus.$off("grandson",this.handleMmsg);
}
},
}
</script>
<style scoped>
</style>
components/Son.vue
<template>
<div>
<hr>
我是子元件
<br>
<Grandson></Grandson>
</div>
</template>
<script>
import Grandson from '../components/Grandson';
import {EventBus} from '../eventBus';
export default {
components: {
Grandson,
},
mounted () {
//監聽事件
EventBus.$on("grandson",(msg)=>{
console.log(msg);
});
},
}
</script>
<style scoped>
</style>
components/Grandson.vue
<template>
<div>
<hr>
我是孫子元件
<br>
<button @click="handleMsg">點選發出訊息</button>
</div>
</template>
<script>
import {EventBus} from '../eventBus';
export default {
methods: {
handleMsg() {
//發出grandson事件
EventBus.$emit("grandson","我是元件GrandSon")
}
},
}
</script>
<style scoped>
</style>
App.vue
<template>
<div id="app">
<Parent></Parent>
</div>
</template>
<script>
import Parent from './components/Parent'
export default {
name: 'App',
components: {
Parent,
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
效果截圖:
相關文章
- Vue 中 $on $once $off $emit 詳細分析,以及使用VueMIT
- Vue事件匯流排(EventBus)Vue事件
- Vue計算屬性和偵聽器Vue
- vue之監聽事件Vue事件
- Vue中計算屬性和偵聽器Vue
- Vue自定義元件事件傳遞:EventBus部分Vue元件事件
- 前端【VUE】03-vue【computed 計算屬性】【watch 偵聽器】前端Vue
- Vue事件匯流排(EventBus)使用詳細介紹Vue事件
- 複習Vue中的方法,計算和偵聽者Vue
- Vue.js中偵聽器watch 的高階用法Vue.js
- 【原始碼系列#04】Vue3偵聽器原理(Watch)原始碼Vue
- vue中$emit與$onVueMIT
- vue 監聽頁面滾動事件Vue事件
- VUE-UNI事件轉發監聽Vue事件
- Vue中的計算屬性和偵聽器比較Vue
- Vue原始碼學習: 關於對Array的資料偵聽Vue原始碼
- 使用 vue 例項更好的監聽事件Vue事件
- Vue中計算屬性computed與偵聽器watch的區別Vue
- vue的監聽鍵盤事件的快捷方法Vue事件
- 深入理解Vue 3:計算屬性與偵聽器的藝術Vue
- vue 動態監聽視窗大小變化事件Vue事件
- vue.js繫結事件監聽器(v-on)Vue.js事件
- vue中 關於$emit的用法VueMIT
- 在Netty聊天室應用程式中自定義事件處理程式和偵聽器Netty事件
- Flutter中的事件匯流排(EventBus)Flutter事件
- Abp領域事件(EventBus)原始碼解析事件原始碼
- vue 基礎入門筆記 19:計算屬性和偵聽屬性Vue筆記
- EventBus 在vue的實現Vue
- 事件和事件監聽器事件
- Typescript 回撥函式、事件偵聽的型別定義與註釋--拾人牙慧TypeScript函式事件型別
- vue中子元件傳遞父元件$emitVue元件MIT
- 自己動手寫事件匯流排(EventBus)事件
- 監聽滑鼠事件事件
- jQuery事件監聽jQuery事件
- Flutter事件監聽Flutter事件
- springboot事件監聽Spring Boot事件
- js 監聽事件JS事件
- JavaScript 事件監聽JavaScript事件