搜尋
首頁web前端Vue.js一文淺析Vue元件的自訂事件和全域事件匯流排

這篇文章帶大家了解Vue元件,介紹一下Vue元件的自訂事件和全域事件匯流排,希望對大家有幫助!

一文淺析Vue元件的自訂事件和全域事件匯流排

一,自訂事件

#1.自訂事件是什麼

#自訂事件一種元件間通訊的方式,適用於子元件-> 父元件傳輸資料等

2.要在什麼地方使用

#若App是父元件,School是子元件,School想給App傳數據,那麼就要在App中給School綁定自訂事件(事件的回調在App),也就是父元件必須事先綁定一個自己定義的事件,供給子組件使用,這樣才能完成父子間的數據溝通

就好比小a的父親在外地打工,然後小a想他的爸爸了,然後呢他爸爸提前給了小a一個電話,對小a說,想我了就打這個電話,然後小a打完電話就能和他爸爸進行交流了,打電話就是進行了父組件的自定義事件的回調,所以資料就可以傳給父元件

3.綁定自訂事件

3.1第一種方式,在父元件中:

一文淺析Vue元件的自訂事件和全域事件匯流排

3.2第二種方式,在父組件:mounted(){this . $refs. xxx. $on('shanyu' ,this. test)}

一文淺析Vue元件的自訂事件和全域事件匯流排

#如果在自訂事件裡寫一個原生的事件的話,那麼也會預設為自訂事件,所以我們用@xxx.native來解決這種問題  【相關推薦: vuejs影片教學web前端開發

首先在父元件內寫一個自訂元件(若想讓自訂事件只能觸發一次,可以使用once修飾符,或$once方法)

      // 在父组件内自定义个事件
    getMyStudent(name) {
      console.log("App收到学校名:", name);
      this.studentName = name;
    }
  },
  mounted() {
    this.$refs.student.$on("shanyu", this.getMyStudent);
  }

再找到子元件觸發Student元件實例身上的shanyu事件

一文淺析Vue元件的自訂事件和全域事件匯流排

觸發自訂事件:this. $emit( ' shanyu',資料)

    methods: {
        sendStudentName(){
            //触发Student组件实例身上的shanyu事件
            this.$emit('shanyu',this.name)
        }
    }

4.解綁自訂事件

    unbind(){
        this.$off('shanyu')// 只适用于解绑1个事件
        this.$off(['shanyu','demo'])// 适用于解绑多个
        this.$off()// 适用于解绑全部
    }

注意:透過this. $refs . xxx. $on( 'shanyu',回呼)綁定自訂事件時,回呼要麼配置在methods中,要麼用箭頭函數,否則this指向會出問題,從而引起vue報錯

#二,全域事件匯流排

1.什麼是全域事件匯流排

一種元件間通訊的方式,適用於任意組件間通信。和自訂事件一樣但又遠超過自訂事件,它可以實作兄弟間通訊

#2.如何使用

這裡主要牽涉到三個文件main.js和倆兄弟元件,首先找到main.js就是有vm的那個文件,然後再vue實例裡面安裝全域事件匯流排,那為啥要放在beforCreate這個鉤子裡面呢?因為beforCreate這個宣告週期鉤子的特點就是在資料為刷新之前執行$bus就是目前應用的vm,bus不只有公車的意思還有總線的意思

new Vue({
  el: "#app",
  render: h => h(App),
  // 使用beforCreate这生命周期钩子来进行兄弟间的通信
  beforeCreate() {
    Vue.prototype.$bus = this // 安装全局事件总线
  }
})

3.使用事件匯流排

1.接收資料

#A元件想接收數據,則在A元件中給$bus綁定自訂事件,事件的回調留在A組件本身。 methods(){mounted() {this . $bus . $on( 'xxxx' ,this . demo)}

<script>
export default {
  name: "School",
  data() {
    return {
      name: "山鱼特效屋",
      address: "南京北城区"
    };
  },
  mounted() {
    this.$bus.$on(&#39;shanyu&#39;, (data) => {
      console.log("我是School组件,我收到了数据", data);
    });
  },
  //使用完之后销毁该绑定事件避免后期错误使用
  beforeDestroy() {
    this.$bus.$off("hello")
  },
}
</script>

2.提供資料

#this. $bus.$emit( 'xxxx',傳輸資料)

<template>
  <div>
    <h2 id="学生姓名-name">学生姓名:{{name}}</h2>
    <h2 id="学生性别-sex">学生性别:{{sex}}</h2>
    <button>点击将数据给兄弟School</button>
  </div>
</template>

<script>
export default {
  name: "Student",
  data() {
    return {
      name: "张三",
      sex: "男"
    };
  },
  // 配置一个methods项
  methods: {
      snedStudentName(){
      // 选择给谁提供数据
          this.$bus.$emit(&#39;shanyu&#39;,this.name)
      }
  },
}
</script>

註:最好在beforeDestroy鉤子中,用$off去解綁目前元件所用到的事件。

(學習影片分享:vuejs入門教學程式設計基礎影片

以上是一文淺析Vue元件的自訂事件和全域事件匯流排的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除
vue.js vs.反應:用例和應用程序vue.js vs.反應:用例和應用程序Apr 29, 2025 am 12:36 AM

Vue.js適合小型到中型項目,React適合大型項目和復雜應用場景。 1)Vue.js易於上手,適用於快速原型開發和小型應用。 2)React在處理複雜狀態管理和性能優化方面更有優勢,適合大型項目。

VUE.JS與React:比較性能和效率VUE.JS與React:比較性能和效率Apr 28, 2025 am 12:12 AM

Vue.js和React各有優勢:Vue.js適用於小型應用和快速開發,React適合大型應用和復雜狀態管理。 1.Vue.js通過響應式系統實現自動更新,適用於小型應用。 2.React使用虛擬DOM和diff算法,適合大型和復雜應用。選擇框架時需考慮項目需求和團隊技術棧。

vue.js vs.反應:社區,生態系統和支持vue.js vs.反應:社區,生態系統和支持Apr 27, 2025 am 12:24 AM

Vue.js和React各有優勢,選擇應基於項目需求和團隊技術棧。 1.Vue.js社區友好,提供豐富學習資源,生態系統包括VueRouter等官方工具,支持由官方團隊和社區提供。 2.React社區偏向企業應用,生態系統強大,支持由Facebook及其社區提供,更新頻繁。

React和Netflix:探索關係React和Netflix:探索關係Apr 26, 2025 am 12:11 AM

Netflix使用React來提升用戶體驗。 1)React的組件化特性幫助Netflix將復雜UI拆分成可管理模塊。 2)虛擬DOM優化了UI更新,提高了性能。 3)結合Redux和GraphQL,Netflix高效管理應用狀態和數據流動。

vue.js vs.後端框架:澄清區別vue.js vs.後端框架:澄清區別Apr 25, 2025 am 12:05 AM

Vue.js是前端框架,後端框架用於處理服務器端邏輯。 1)Vue.js專注於構建用戶界面,通過組件化和響應式數據綁定簡化開發。 2)後端框架如Express、Django處理HTTP請求、數據庫操作和業務邏輯,運行在服務器上。

vue.js和前端堆棧:了解連接vue.js和前端堆棧:了解連接Apr 24, 2025 am 12:19 AM

Vue.js與前端技術棧緊密集成,提升開發效率和用戶體驗。 1)構建工具:與Webpack、Rollup集成,實現模塊化開發。 2)狀態管理:與Vuex集成,管理複雜應用狀態。 3)路由:與VueRouter集成,實現單頁面應用路由。 4)CSS預處理器:支持Sass、Less,提升樣式開發效率。

Netflix:探索React(或其他框架)的使用Netflix:探索React(或其他框架)的使用Apr 23, 2025 am 12:02 AM

Netflix選擇React來構建其用戶界面,因為React的組件化設計和虛擬DOM機制能夠高效處理複雜界面和頻繁更新。 1)組件化設計讓Netflix將界面分解成可管理的小組件,提高了開發效率和代碼可維護性。 2)虛擬DOM機制通過最小化DOM操作,確保了Netflix用戶界面的流暢性和高性能。

vue.js和前端:深入研究框架vue.js和前端:深入研究框架Apr 22, 2025 am 12:04 AM

Vue.js被開發者喜愛因為它易於上手且功能強大。 1)其響應式數據綁定係統自動更新視圖。 2)組件系統提高了代碼的可重用性和可維護性。 3)計算屬性和偵聽器增強了代碼的可讀性和性能。 4)使用VueDevtools和檢查控制台錯誤是常見的調試技巧。 5)性能優化包括使用key屬性、計算屬性和keep-alive組件。 6)最佳實踐包括清晰的組件命名、使用單文件組件和合理使用生命週期鉤子。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器