Vue中$bus的用法及$on、$off的使用說明
$bus的用法及$on、$off的使用
Vue中 $bus一般與 $on、 $off連用,一般用在任意組件間的通訊,所以今天就一起說,這里給大家舉一個案例
首先在main.js中配置全局總線
//引入Vue import Vue from 'vue' //引入App import App from './App.vue' //關(guān)閉Vue的生產(chǎn)提示 Vue.config.productionTip = false //創(chuàng)建vm new Vue({ ?? ?el:'#app', ?? ?render: h => h(App), ?? ?beforeCreate(){ ? ? ? ? ? ? ? ? //在初始化階段前 ?? ??? ?Vue.prototype.$bus = this ? //配置全局總線,bus有總線的意思 ?? ?} })
在Student組件中提供數(shù)據(jù)給另一個組件(School組件)
<template> ?? ?<div class="student"> ?? ??? ?<h2>學生姓名:{{name}}</h2> ?? ??? ?<h2>學生性別:{{sex}}</h2> ?? ??? ?<button @click="sendStudentName">把學生名給School組件</button> ?? ?</div> </template>
<script> ?? ?export default { ?? ??? ?name:'Student', ?? ??? ?data() { ?? ??? ??? ?return { ?? ??? ??? ??? ?name:'張三', ?? ??? ??? ??? ?sex:'男', ?? ??? ??? ?} ?? ??? ?}, ?? ??? ?methods: { ?? ??? ??? ?sendStudentName(){ ? ? ? ?//提供發(fā)送數(shù)據(jù) ?? ??? ??? ??? ?this.$bus.$emit('hello',this.name) ?? ??? ??? ?} ?? ??? ?}, ?? ?} </script>
在School組件中使用事件總線,接收數(shù)據(jù)。School組件想接收數(shù)據(jù),則在School組件中給 $bus綁定事件,事件的回調(diào)則留在School組件自身。
<template> ?? ?<div class="school"> ?? ??? ?<h2>學校名稱:{{name}}</h2> ?? ??? ?<h2>學校地址:{{address}}</h2> ?? ?</div> </template>
<script> ?? ?export default { ?? ??? ?name:'School', ?? ??? ?data() { ?? ??? ??? ?return { ?? ??? ??? ??? ?name:'工程學院', ?? ??? ??? ??? ?address:'重慶巴南', ?? ??? ??? ?} ?? ??? ?}, ?? ??? ?mounted() { ?? ??? ??? ?this.$bus.$on('hello',(data)=>{ ? ? ?//綁定當前事件(這里以hello為例) ?? ??? ??? ??? ?console.log('我是School組件,收到了數(shù)據(jù)',data) ?? ??? ??? ?}) ?? ??? ?}, ?? ??? ?beforeDestroy(){ ? ? ? ?//收尾操作,銷毀 ?? ??? ??? ?this.$bus.$off('hello') ?//$off解綁當前組件所用到的事件 ?? ??? ?} ?? ?} </script>
到這里已經(jīng)結(jié)束了,再給一個App組件,大家可以試一試這個案例
<template> ?? ?<div class="app"> ?? ??? ?<School/> ?? ??? ?<Student/> ?? ?</div> </template>
<script> ?? ?import Student from './components/Student' ?? ?import School from './components/School' ?? ?export default { ?? ??? ?name:'App', ?? ??? ?components:{School,Student}, ?? ?} </script>
vue實例事件總結(jié)($on,$once,$off,$emit)
1.什么是實例事件?
實例事件就是在構(gòu)造器外部調(diào)用構(gòu)造器內(nèi)部的數(shù)據(jù)。
2.使用場景
比如構(gòu)造器已經(jīng)有一個加的方法,現(xiàn)在領(lǐng)導(dǎo)說還要做一個減的方法,而我又不想動構(gòu)造器里面的信息,那就可以使用實例事件了.操作如下:
3.與$on對應(yīng)的還有一個$once
上述代碼只改一個單詞$once
app.$once('reduce',function(){ console.log("減的方法觸發(fā)了"); this.num-- })
結(jié)果:減的方法只執(zhí)行一次.
4.$off關(guān)閉實例事件
關(guān)閉reduce后,減就失效了.
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項目多環(huán)境配置(.env)的實現(xiàn)
最常見的多環(huán)境配置,就是開發(fā)環(huán)境配置,和生產(chǎn)環(huán)境配置,本文主要介紹了vue項目多環(huán)境配置的實現(xiàn),感興趣的可以了解一下2021-07-07vue父組件傳值子組件報錯Avoid?mutating?a?prop?directly解決
這篇文章主要為大家介紹了vue父組件傳值子組件報錯Avoid?mutating?a?prop?directly解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09淺析vue偵測數(shù)據(jù)的變化之基本實現(xiàn)
這里涉及到Vue一個重要特性:響應(yīng)式系統(tǒng)。數(shù)據(jù)模型只是普通的 JavaScript對象,當我們修改時,視圖會被更新,而變化偵測是響應(yīng)式系統(tǒng)的核心2021-06-06Vue中addEventListener()?監(jiān)聽事件案例講解
這篇文章主要介紹了Vue中addEventListener()?監(jiān)聽事件案例講解,包括語法講解和事件冒泡或事件捕獲的相關(guān)知識,本文結(jié)合示例代碼給大家講解的非常詳細,需要的朋友可以參考下2022-12-12