最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue組件之事件總線和消息發(fā)布訂閱詳解

 更新時間:2022年02月16日 11:49:33   作者:我會努力變強的  
這篇文章主要為大家詳細介紹了Vue組件之事件總線和消息發(fā)布訂閱,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

簡介

主要介紹事件總線的定義和編寫方法和Vue是如何實現(xiàn)消息的訂閱與發(fā)布的。

事件總線

事件總線是組件間通信的一種方式,適用于任意組件間的通信,比如毫不相干的兩個組件、父子組件間、后代組件等等,都能通信。

事件總線有兩個特性:

  • 是一個vue組件實例或者一個vue實例,充當一個消息中轉(zhuǎn)站,如果A、B組件想要通信,那么A組件存消息到中轉(zhuǎn)站,B消息拿,或者反過來。
  • 所有組件都要能獲取到事件總線。

如果A、B組件間通信,如果A發(fā)送數(shù)據(jù)給B的情況下,需要以下步驟:

大前提是,需要創(chuàng)建一個事件總線,通常使用vm實例本身作為事件總線,并把他在一定的時機保存在Vue構(gòu)造函數(shù)的原型對象中,因為組件實例的原型對象的原型對象=vue實例的原型對象,所以這樣所有的組件實例都是獲取到事件總線。

1.B(接收方)需要往事件總線總綁定一個自定義事件,并設(shè)置事件回調(diào)。

2.A(發(fā)送方)想要發(fā)送數(shù)據(jù)時,只需觸發(fā)B在事件總線綁定的自定義事件,并把數(shù)據(jù)傳過去即可。

在這里插入圖片描述

main.js:

//引入vue依賴
import Vue from 'vue'
//引入組件App
import App from './App.vue'

// 關(guān)閉生產(chǎn)提示
Vue.config.productionTip = false

//創(chuàng)建一個vue實例
new Vue({
  render: h => h(App),
  beforeCreate(){
    //通常在beforeCreate生命周期函數(shù)中進行事件總線的設(shè)置。
    //下面代碼就是把vm對象本身設(shè)置到Vue的原型對象中,屬性名通常是$bus,這個不強制
    Vue.prototype.$bus = this;
  }

  //配置該vue實例管理id為app的容器
}).$mount('#app')

在這里插入圖片描述

App.vue:

<template>
    <!-- 編寫結(jié)構(gòu) -->
    <div>
        <A></A>
    <hr>
    <B></B>
    </div>
</template>

<script>


//修改后的
//引入A組件和B組件,涉及es模塊化的語法
import A from "./components/A.vue"
import B from "./components/B.vue"

export default {


    components:{
        //注冊組件
        A,
        B
    }
}
</script>

<style>

</style>

B.vue:

<template>
    <div>
        <div>B組件的名稱:{{name}}</div>
        <div>A組件的名稱:{{NameForA}}</div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            name:"yehaocong",
            NameForA:""
        }
    },
    methods:{
        //觸發(fā)事件時的回調(diào)函數(shù)
        getNameFromA(nameFromAVC){
            console.log("接收來自A組件的名稱:",nameFromAVC);
            this.NameForA = nameFromAVC;
        }
    },
    mounted() {
        //往事件總線總綁定自定義事件。
        this.$bus.$on("getNameFromA",this.getNameFromA);
    },
    beforeDestroy() {
        //通常在組件銷毀時,需要解綁自定義事件。
        this.$bus.$off("getNameFromA")
    },
}
</script>

<style>

</style>

在這里插入圖片描述

A.vue:

<template>
    <div>
        <div>{{name}}</div>
        <button @click="sendName">發(fā)送name屬性值到其他組件</button>
    </div>
</template>

<script>
export default {
    data() {
        return {
            name:"liaoxianyan"
        }
    },
    methods: {
        sendName(){
            //發(fā)送方觸發(fā)事件
            this.$bus.$emit("getNameFromA",this.name);
        }
    },
}
</script>

<style>

</style>

在這里插入圖片描述

效果:

在這里插入圖片描述

在這里插入圖片描述

通常最好需要在組件銷毀時解綁自定義事件:

在這里插入圖片描述

消息的發(fā)布訂閱

訂閱與發(fā)布的定義:

1.是一種組件間通信的一種方式。

類似有一個消息中心,組件A往該消息中心中訂閱了某消息,然后一旦消息組件B往該消息中發(fā)布該消息,組件A會立馬收到該消息,并執(zhí)行相應(yīng)回調(diào)。

通常使用第三方的消息訂閱發(fā)布庫,這里推薦pubsub-js。

第一步:安裝該依賴:npm i pubsub-js

在這里插入圖片描述

第二步:在消息接收方進行訂閱消息。

第三步:在消息發(fā)送方進行消息的發(fā)布。

還是用上面的A、B組件作為例子,A組件時發(fā)送方,B組件時接收方。

第二步:

在B組件定義消息:

在這里插入圖片描述

第三步:在A組件發(fā)布消息:

在這里插入圖片描述

效果:

在這里插入圖片描述

在這里插入圖片描述

通常需要在組件銷毀時進行消息的取消訂閱。

在這里插入圖片描述

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容! 

相關(guān)文章

  • vue+springmvc導(dǎo)出excel數(shù)據(jù)的實現(xiàn)代碼

    vue+springmvc導(dǎo)出excel數(shù)據(jù)的實現(xiàn)代碼

    這篇文章主要介紹了vue+springmvc導(dǎo)出excel數(shù)據(jù)的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • vue.js打包項目后頁面出現(xiàn)空白的解決辦法

    vue.js打包項目后頁面出現(xiàn)空白的解決辦法

    這篇文章主要介紹了vue.js打包項目后頁面出現(xiàn)空白的解決辦法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • vue實現(xiàn)經(jīng)典選項卡功能

    vue實現(xiàn)經(jīng)典選項卡功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)經(jīng)典選項卡功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • elementui中el-row的el-col排列混亂問題及解決

    elementui中el-row的el-col排列混亂問題及解決

    這篇文章主要介紹了elementui中el-row的el-col排列混亂問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue指令工作原理實現(xiàn)方法

    Vue指令工作原理實現(xiàn)方法

    自定義指令是 vue 中使用頻率僅次于組件,其包含 bind 、 inserted 、 update 、 componentUpdated 、 unbind 五個生命周期鉤子,接下來通過本文給大家詳細介紹Vue指令工作原理實現(xiàn)方法,需要的朋友參考下吧
    2021-06-06
  • Vue Build后的項目的根路徑配置方式

    Vue Build后的項目的根路徑配置方式

    這篇文章主要介紹了Vue Build后的項目的根路徑配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue使用websocket實現(xiàn)實時數(shù)據(jù)推送功能

    vue使用websocket實現(xiàn)實時數(shù)據(jù)推送功能

    這篇文章主要為大家詳細介紹了vue如何使用websocket實現(xiàn)實時數(shù)據(jù)推送,發(fā)布訂閱重連單點登錄功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Vue跨域請求問題解決方案過程解析

    Vue跨域請求問題解決方案過程解析

    這篇文章主要介紹了Vue跨域請求問題解決方案過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • vue中onmounted周期里獲取不到dom的原因及分析

    vue中onmounted周期里獲取不到dom的原因及分析

    這篇文章主要介紹了vue中onmounted周期里獲取不到dom的原因及分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue項目中引入字體文件的幾種方法總結(jié)

    Vue項目中引入字體文件的幾種方法總結(jié)

    在 Vue 項目中引入自定義字體文件,可以通過多種方式實現(xiàn),這取決于你的項目結(jié)構(gòu)、構(gòu)建工具以及字體文件的來源,本文將詳細介紹如何通過不同方法引入本地字體文件以及從外部引入字體,需要的朋友可以參考下
    2024-10-10

最新評論

望谟县| 汤阴县| 湘潭市| 运城市| 邵武市| 慈溪市| 宁陵县| 长顺县| 隆子县| 祁东县| 长宁县| 隆昌县| 金堂县| 宁化县| 平陆县| 探索| 马龙县| 九江市| 行唐县| 五指山市| 苏州市| 丰原市| 韶山市| 抚顺市| 花莲市| 称多县| 尤溪县| 会宁县| 遵义市| 灵石县| 岳阳县| 城步| 马鞍山市| 子长县| 富锦市| 桃江县| 白银市| 根河市| 宜都市| 凉城县| 文登市|