【Vue】全局事件總線 TodoList 事件總線

目錄

一、 實現所有組件看到x事件

二、 實現$on $off 以及 $emit

總結不易~ 本章節對我有很大的收獲, 希望對你也是!!!


本節素材已上傳至Gitee:yihaohhh/我愛Vue - Gitee.com

全局事件總線圖:

?本節素材已上傳至Gitee:yihaohhh/我愛Vue - Gitee.com

一、 實現所有組件看到x事件

到main.js 里面設置全局總線

import Vue from 'vue'import App from './App.vue'// 關閉Vue生產提示
Vue.config.productionTip = falseVue.prototype.x = { a: 1, b: 2 }// 創建vm
new Vue({el: '#app',render: h => h(App)
})

分別在School 和 Student組件上進行掛載輸出當前對象?

現在就是實現了第一個, 能讓所有組件看到 x

?本節素材已上傳至Gitee:yihaohhh/我愛Vue - Gitee.com

二、 實現$on $off 以及 $emit

Vue.prototype.x = { a: 1, b: 2 }

由于上面只是一個普通對象, 所以我們沒有辦法能夠訪問它的$on, $off以及$emit, 因為這些只存在組件的實例對象中, 那么我們第一件事情就是要創建組件的實例對象。

這個d組件實例對象 就是相當于一個vc 只是一個組件的實例對象~

const Demo = Vue.extend({}) // 創建一個組件
const d = new Demo() // 組件的一個實例對象// Vue.prototype.x = { a: 1, b: 2 }
Vue.prototype.x = d

在School組件內進行事件綁定:

  mounted() {console.log(this.x)// $on 監聽一個名字叫 "hello" 的事件,一旦別人觸發了這個事件,我就執行后面的代碼。// $on 給x綁定了一個'hello' 事件this.x.$on('hello', (data) => {console.log('我是School組件, 收到了數據', data)})},

在Student組件內進行值的傳遞:

  <button @click="sendStudenName">把學生名給School組件</button>methods: {sendStudenName() {this.x.$emit('hello', 666)}}

可以看到確實起到了全局的作用分別來進行值的輸入和接收?

但是定義那么多行的vc實在是過于臃腫,我們就可以直接在創建vm的時候來直接定義全局事件

// 創建vm
new Vue({el: '#app',render: h => h(App),beforeCreate() {// 這里的 $bus 是一個全稱Vue.prototype.$bus = this // 這個this本身就是Vue的實例對象// 安裝全局事件總線}
})

Student組件用來傳值:

<button @click="sendStudenName">把學生名給School組件</button> methods: {sendStudenName() {this.$bus.$emit('hello', this.name)}}

School用兩個生命周期鉤子進行獲取值:分別用來綁定事件?和 解綁解綁事件!

  mounted() {// $on 監聽一個名字叫 "hello" 的事件,一旦別人觸發了這個事件,我就執行后面的代碼。// $on 給x綁定了一個'hello' 事件this.$bus.$on('hello', (data) => {console.log('我是School組件, 收到了數據', data)})},// 銷毀之前的鉤子// beforeDestroy已經廢棄了// 用完了 一定要把傀儡身上的事件解綁beforeUnmount() {this.$bus.$off('hello')}

TodoList全局事件總線傳值

雖然我們學習了全局事件總線,任意兩個組件之間的通信都非常方便,但是也不是所有組件之間的通信都要用上全局事件總線,就比如:父組件給子組件傳遞數據,props就極其方便~

但是在TodoList中的MyItem組件跟 App組件之間是爺孫關系 所以用全局事件總線就會比較方便~

因為List組件是沒有用到該方法的 而是轉手就又傳給了Item組件, 所以這里用全局事件總線就會非常方便!

那么我們就需要做到的是直接進行通信, 不在進行逐層傳遞~

第一步就是創建全局事件總線:

// 創建vm
new Vue({el: '#app',render: h => h(App),beforeCreate() {Vue.prototype.$bus = this}
})

第二步, 清除掉List組件和App組件 以及 Item組件通過props傳入的函數:

      <MyList :todos="todos" />

第三步, 確定是Item給App傳遞數據

  methods: {handleCheck(id) {console.log(id)// this.checkTodo(id)this.$bus.$emit('checkTodo', id)},handleDelete(id) {if(confirm('確定刪除嗎')) {console.log(id)// this.deleteTodo(id)this.$bus.$emit('deleteTodo', id)}}}

利用全局事件總線 進行觸發事件

分別對數據進行添加和刪除的時候, 這里都觸發的是$bus全局事件~

?本節素材已上傳至Gitee:yihaohhh/我愛Vue - Gitee.com

總結不易~ 本章節對我有很大的收獲, 希望對你也是!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904564.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python編程virtualenv庫的簡介和使用方法

Python編程virtualenv庫的簡介和使用方法 virtualenv和conda的區別是什么

MySQL的行級鎖鎖的到底是什么?

大家好&#xff0c;我是鋒哥。今天分享關于【MySQL的行級鎖鎖的到底是什么?】面試題。希望對大家有幫助&#xff1b; MySQL的行級鎖鎖的到底是什么? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 MySQL的行級鎖是數據庫管理系統&#xff08;DBMS&#xff09;的一…

【C++游戲引擎開發】第33篇:物理引擎(Bullet)—射線檢測

一、射線檢測核心理論體系 1.1 射線檢測的數學基礎 1.1.1 參數化射線方程 射線在三維空間中的數學表達采用參數方程: r ( t ) = o + t d ^ ( t ∈ [

【操作系統】線程崩潰機制詳解

在分布式系統與多線程編程的世界里&#xff0c;一個看似簡單的問題卻暗藏玄機&#xff1a;當某條線程突然崩潰&#xff0c;其所屬進程會隨之消亡嗎&#xff1f;這個問題背后隱藏著操作系統與編程語言的精妙設計&#xff0c;本文將從底層原理到工程實踐層層剖析。 一、線程崩潰…

無人機 | 無人機設計概述

無人機設計是一個復雜的系統工程&#xff0c;涉及空氣動力學、電子技術、材料科學、控制算法等多個領域的綜合應用。以下是無人機設計的主要模塊和關鍵要素概述&#xff1a; 一、總體設計目標 任務需求定義 用途&#xff1a;航拍、物流、農業、軍事偵察、環境監測等性能指標&am…

強啊!Oracle Database 23aiOracle Database 23ai:使用列別名進行分組排序!

大家好&#xff0c;這里是架構資源棧&#xff01;點擊上方關注&#xff0c;添加“星標”&#xff0c;一起學習大廠前沿架構&#xff01; 從 Oracle Database 23ai 開始&#xff0c;您可以在 GROUP BY 和 HAVING 子句中直接使用列別名。此功能在早期版本的 Oracle Database 中不…

Modbus 轉 IEC61850 網關

第一章 產品概述 Modbus 轉 IEC61850 網關型號 SG-IEC61850-Modbus &#xff0c;是三格電子推出的工業級網關&#xff08;以 下簡稱盒子或網關&#xff09;&#xff0c;主要用于 Modbus RTU/TCP 數據采集、 DLT645-1997/2007 數據采集&#xff0c; 可接多功能電力儀表…

MySQL 中的 MVCC 是什么?

MySQL 中的 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并發控制&#xff09; 是一種用于實現高并發讀寫操作的機制&#xff0c;它通過維護數據的多個版本來解決讀寫沖突&#xff0c;從而在保證事務隔離性的同時&#xff0c;減少鎖的使用&#xff0c…

【Python】讓Selenium 像Beautifulsoup一樣,用解析HTML 結構的方式提取元素!

我在使用selenium的find_element的方式去獲取網頁元素&#xff0c;一般通過xpath、css_selector、class_name的方式去獲取元素的絕對位置。 但是有時候如果網頁多了一些彈窗或者啥之類的&#xff0c;絕對位置會發生變化&#xff0c;使用xpath等方法&#xff0c;需要經常變動。…

使用xlwings將excel表中將無規律的文本型數字批量轉化成真正的數字

之前我寫了一篇文章excel表中將無規律的文本型數字批量轉化成真正的數字-CSDN博客 是使用excel自帶的操作&#xff0c;相對繁瑣。 今天使用xlwings操作&#xff0c;表格如下&#xff08;有真正的數字&#xff0c;也有文本型數字&#xff0c;混在在一起&#xff09;&#xff1…

ICML 2025錄取率公布,spotlight posters僅占2.6%

近日&#xff0c;ICML 2025公布了論文錄用結果。本次大會共收到 12,107篇有效論文投稿&#xff0c;比去年增加了28%&#xff0c;今年錄取論文3,260篇&#xff0c;錄取率為 26.9%。其中僅有313篇被列為“焦點海報”&#xff08;即所有投稿中排名前2.6%的論文&#xff09;&#x…

全局網絡:重構數字時代的連接范式

從局部到全局 —— 網絡架構的范式革命 在全球化與數字化深度融合的今天&#xff0c;傳統網絡架構的 “碎片化” 問題日益凸顯&#xff1a;跨地域數據流通低效、設備互聯孤島化、安全策略難以統一。 全局網絡作為一種突破地域與技術邊界的新型網絡架構&#xff0c;正成為企業…

SpringAI實現AI應用-內置顧問

SpringAI實戰鏈接 1.SpringAl實現AI應用-快速搭建-CSDN博客 2.SpringAI實現AI應用-搭建知識庫-CSDN博客 3.SpringAI實現AI應用-內置顧問-CSDN博客 4.SpringAI實現AI應用-使用redis持久化聊天記憶-CSDN博客 5.SpringAI實現AI應用-自定義顧問&#xff08;Advisor&#xff09…

Nginx核心原理以及案例分析(AI)

一、Nginx核心原理分析 1. ?事件驅動與非阻塞模型? ?Epoll異步機制?&#xff1a;基于Linux的epoll模型實現異步非阻塞I/O處理&#xff0c;單線程可高效管理數萬并發連接&#xff0c;避免傳統select模型的輪詢性能瓶頸。?多進程架構?&#xff1a;采用Master-Worker模式&…

【Bug經驗分享】SourceTree用戶設置必須被修復/SSH 主機密鑰未緩存(踩坑)

文章目錄 配置錯誤問題原因配置錯誤問題解決主機密鑰緩存問題原因主機密鑰緩存問題解決 更多相關內容可查看 配置錯誤問題原因 電腦太卡&#xff0c;曾多次強制關機&#xff0c;在關機前沒有關閉SourceTree&#xff0c;導致配置錯誤等問題 配置錯誤問題解決 方式一&#xff…

阿里云服務器-centos部署定時同步數據庫數據-dbswitch

前言&#xff1a; 本文章介紹通過dbswitch工具實現2個mysql數據庫之間實現自動同步數據。 應用場景&#xff1a;公司要求實現正式環境數據庫數據自動冷備 dbswitch依賴環境&#xff1a;git ,maven,jdk 方式一&#xff1a; 不需要在服務器中安裝git和maven&#xff0c;直接用…

windows10 環境下通過huggingface_hub下載huggingface社區模型

項目場景&#xff1a; 有一些模型需要在huggingface下載&#xff0c;因為國內限制&#xff0c;一般無法訪問huggingface網站進行下載。然而&#xff0c;可以通過國內的鏡像下載。網上大部分都是在linux系統下&#xff0c;通過huggingface提供的指令下載。本文針對采用python腳…

C++之異常

目錄 前言 一、什么是異常 二、C中的異常 2.1 C語言中的異常處理 2.2 C中的異常處理 2.3 異常的拋出與捕獲 2.4 棧展開 2.5 查找匹配的處理代碼 2.6 異常重新拋出 2.7 異常安全問題 2.8 異常規范 2.9 標準庫的異常 前言 在之前我們已經學習了C中不少知識了&#xff0c;但是其中…

$在R語言中的作用

在 R 語言中&#xff0c;$ 是一個非常重要的操作符&#xff0c;主要用于訪問對象的成員或組件。它的用途非常廣泛&#xff0c;不僅限于數據框&#xff08;data frame&#xff09;&#xff0c;還可以用于列表&#xff08;list&#xff09;、環境&#xff08;environment&#xf…

設計一個分布式系統:要求全局消息順序,如何使用Kafka實現?

一、高吞吐低延遲 Kafka 集群設計要點 1. 分區策略優化 // 計算合理分區數公式&#xff08;動態調整&#xff09; int numPartitions max(Tp, Tc) / min(Tp, Tc) // Tp生產者吞吐量 Tc消費者吞吐量建議初始按業務鍵&#xff08;如訂單ID&#xff09;哈希分區單分區吞吐建議…