Vue 項目中的組件引用如何實現,依賴組件間的數據功能交互及示例演示

在 Vue 項目中,組件間的引用與數據交互是核心功能之一。以下是組件引用和數據交互的詳細實現方式及示例:


一、組件引用方式

1. 基本組件引用
  • 局部注冊:在父組件中按需引入子組件并注冊。
// ParentComponent.vue
import ChildComponent from './ChildComponent.vue'export default {components: {ChildComponent},template: `<ChildComponent :message="msg" @update="handleUpdate" />`
}
  • 全局注冊:在主入口文件中統一注冊,所有組件均可使用。
// main.js
import { createApp } from 'vue'
import App from './App.vue'
import GlobalComp from './components/GlobalComp.vue'const app = createApp(App)
app.component('GlobalComp', GlobalComp)
app.mount('#app')
2. 動態組件加載
<!-- DynamicComponent.vue -->
<template><component :is="currentView"></component>
</template><script>
import Home from './Home.vue'
import About from './About.vue'export default {data() {return {currentView: 'Home'}},components: { Home, About }
}
</script>

二、組件間數據交互方式

1. Props & $emit(父子組件通信)
  • 父 → 子:通過 props 傳遞數據。
  • 子 → 父:通過 $emit 觸發自定義事件。

示例

<!-- Parent.vue -->
<template><div><Child :count="counter" @increment="addCount" /></div>
</template><script>
import Child from './Child.vue'export default {data() {return { counter: 0 }},methods: {addCount() {this.counter += 1}}
}
</script>
<!-- Child.vue -->
<template><button @click="increment">Click Me: {{ count }}</button>
</template><script>
export default {props: ['count'],methods: {increment() {this.$emit('increment') // 通知父組件}}
}
</script>

2. provide/inject(任意層級組件通信)

用于祖先組件直接向后代組件傳遞數據,無需逐層傳遞。

示例

<!-- Ancestor.vue -->
<template><div><Descendant /></div>
</template><script>
import Descendant from './Descendant.vue'export default {provide() {return {sharedState: this.state}},data() {return { state: 'from Ancestor' }}
}
</script>
<!-- Descendant.vue -->
<template><div>{{ injectedData }}</div>
</template><script>
export default {inject: ['sharedState'],computed: {injectedData() {return this.sharedState}}
}
</script>

3. Vuex(復雜狀態管理)

適用于多組件共享狀態的場景。

安裝與配置

npm install vuex@next
// store.js
import { createStore } from 'vuex'export const store = createStore({state() {return { count: 0 }},mutations: {increment(state) {state.count++}}
})
<!-- Counter.vue -->
<template><div>{{ $store.state.count }}<button @click="$store.commit('increment')">Increment</button></div>
</template>

4. 事件總線(Event Bus)

用于非父子組件間的輕量級通信(Vue 3 推薦使用 mitt 替代)。

示例

// eventBus.js
import mitt from 'mitt'
const emitter = mitt()
export default emitter
<!-- Sender.vue -->
<script>
import emitter from './eventBus'emitter.emit('notify', { message: 'Hello!' })
</script>
<!-- Receiver.vue -->
<script>
import emitter from './eventBus'emitter.on('notify', (data) => {console.log(data.message)
})
</script>

三、完整示例:計數器應用

1. 項目結構
src/
├── components/
│   ├── CounterDisplay.vue
│   └── IncrementButton.vue
├── App.vue
└── main.js
2. 代碼實現
<!-- App.vue -->
<template><div><CounterDisplay :count="counter" /><IncrementButton @increment="counter++" /></div>
</template><script>
import CounterDisplay from './components/CounterDisplay.vue'
import IncrementButton from './components/IncrementButton.vue'export default {data() {return { counter: 0 }},components: { CounterDisplay, IncrementButton }
}
</script>
<!-- CounterDisplay.vue -->
<template><h1>Count: {{ count }}</h1></template>
<script>
export default {props: ['count']
}
</script>
<!-- IncrementButton.vue -->
<template><button @click="$emit('increment')">+1</button></template>

四、注意事項

  1. Prop 單向數據流:子組件不應直接修改父組件傳遞的 props
  2. 事件命名規范:使用 kebab-case 命名自定義事件(如 update:field)。
  3. 性能優化:避免過度使用全局狀態管理(如 Vuex),優先選擇組件間直接通信。

通過以上方式,可以實現靈活高效的組件引用與數據交互!

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

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

相關文章

? 使用 Flask 實現頭像文件上傳與加載功能

文章目錄&#x1f9f1; 技術棧&#x1f5c2;? 項目結構與配置&#x1f510; 用戶身份校驗邏輯&#x1f4e4; 頭像上傳接口&#xff1a;/file/avatar/upload&#x1f4e5; 加載頭像接口&#xff1a;/file/avatar/load/<filename>&#x1f9ea; 示例請求&#xff08;使用 …

去除視頻字幕 5: 使用 ProPainter, 記錄探索過程

使用 ProPainter 去除視頻上的字幕&#xff0c;效果演示&#xff08;比之前好多了。&#xff09;。 1. 項目目標 去除視頻 (bear.webm) 中的硬字幕。 2. 初始嘗試與關鍵失敗&#xff1a;IOPaint 方法: 使用 IOPaint&#xff08;一個圖像修復工具&#xff09;配合 PaddleOCR 逐…

JavaScript HTTP 請求:從老古董到新潮流

前端開發離不開跟后端打交道&#xff0c;HTTP 請求就是這座橋梁。JavaScript 提供了好幾種方式來發請求&#xff0c;從老牌的 XMLHttpRequest (XHR) 到現代的 Fetch API&#xff0c;再到各種好用的第三方庫&#xff08;像 Axios、Ky、Superagent&#xff09;。咱們一個一個聊清…

Windows10系統使用Cmake4.1.0構建工具+Visual Studio2022編譯Opencv4.11教程

安裝提示 后續安裝本Cmake和Opencv版本及以上都可以。Microsoft Visual Studio2022已默認安裝&#xff0c;沒有安裝給出教程鏈接。 一、Cmake4.1.0下載 1.官網下載&#xff1a;https://cmake.org/download/&#xff0c;找到cmake-4.1.0-rc3-windows-x86_64.zip版本 2.壓縮包…

【性能測試】Jmeter+Grafana+InfluxDB+Prometheus Windows安裝部署教程

一、工具作用與整體架構 1.1 各工具核心作用 工具作用描述關鍵特性Jmeter性能測試工具&#xff0c;模擬多用戶并發請求&#xff0c;生成測試數據支持HTTP/HTTPS、數據庫等多種協議&#xff0c;可自定義測試場景InfluxDB時序數據庫&#xff0c;專門存儲時間序列數據&#xff0…

【Kubernetes】使用Deployment進行的資源調度,資源清理,伸縮與更新管控

Kubernetes Deployment 實戰&#xff1a;從資源清理到伸縮與更新管控 一、基礎準備&#xff1a;清理閑置 ReplicaSet 在使用 Deployment 時&#xff0c;每次更新都會生成新的 ReplicaSet&#xff08;簡稱 RS&#xff09;&#xff0c;舊的 RS 會被保留但設置為 DESIRED0。這些閑…

stm32使用USB虛擬串口,因電腦缺少官方驅動而識別失敗(全系列32單片機可用)

驅動下載地址 官網地址&#xff1a;https://www.st.com/en/development-tools/stsw-stm32102.html

枚舉中間位置基礎篇

參考資料來源靈神在力扣所發的題單&#xff0c;僅供分享學習筆記和記錄&#xff0c;無商業用途。 核心思路&#xff1a; 一&#xff1a;直接直接用數據結構記錄需要的數據&#xff0c;在枚舉右&#xff0c;維護左的循環中&#xff0c;刪除當前位置的元素即可達成一樣效果 二…

企業選擇將服務器放在IDC機房托管的優勢

在服務器作為數據存儲和傳輸的核心設備的社會環境中&#xff0c;服務器的穩定性和安全性會直接影響到企業業務的連續性和用戶的滿意程度&#xff0c;隨著云計算技術和大數據的興起&#xff0c;企業對于服務器的需求也在日益增加&#xff0c;而如何高效、安全的管理服務器則是各…

自動化UI測試工具TestComplete的AI雙引擎:即時數據集 + 自愈測試

隨著敏捷開發和持續交付模式的普及&#xff0c;傳統的軟件測試方法正面臨著前所未有的挑戰。測試團隊在追求快速迭代的同時&#xff0c;往往陷入測試數據準備和測試維護的泥潭&#xff0c;嚴重制約了交付效率和質量保障能力。 TestComplete作為業界領先的自動化測試工具&#…

用KNN實現手寫數字識別:基于 OpenCV 和 scikit-learn 的實戰教學 (超級超級超級簡單)

用KNN實現手寫數字識別&#xff1a;基于 OpenCV 和 scikit-learn 的實戰教學在這篇文章中&#xff0c;我們將使用 KNN&#xff08;K-Nearest Neighbors&#xff09;算法對手寫數字進行分類識別。我們會用 OpenCV 讀取圖像并預處理數據&#xff0c;用 scikit-learn 構建并訓練模…

數據結構自學Day15 -- 非比較排序--計數排序

一、計數排序&#xff08;Counting Sort&#xff09;計數排序是一種非比較型的排序算法&#xff0c;它的核心思想是&#xff1a;利用“元素的值”來確定它在結果數組中的位置&#xff0c;通過“統計每個數出現的次數”來完成排序。二、如何實現計數排序&#xff08;核心步驟&am…

k8s的權限

來自博客&#xff1a;25-k8s集群中-RBAC用戶角色資源權限_權限 資源 角色-CSDN博客 一.RBAC概述&#xff08;基于角色的訪問控制&#xff09; 1.圖解 用戶&#xff1a; 1.user 2.serviceAccount 3.Group 用戶角色 1.Role:局部資源角色 2.clusterRole:全局資源角色額 角色綁…

C++ - 仿 RabbitMQ 實現消息隊列--服務端核心模塊實現(三)

目錄 隊列數據管理 代碼實現 測試代碼 綁定信息(交換機-隊列)管理 代碼實現 測試代碼 隊列數據管理 當前隊列數據的管理&#xff0c;本質上是隊列描述信息的管理&#xff0c;描述當前服務器上有哪些隊列。 定義隊列描述數據類 隊列名稱是否持久化標志是否獨占標志是否自…

51c自動駕駛~合集9

自己的原文哦~ https://blog.51cto.com/whaosoft/11627386 #端到端1 說起端到端&#xff0c;每個從業者可能都覺得會是下一代自動駕駛量產方案繞不開的點&#xff01;特斯拉率先吹響了方案更新的號角&#xff0c;無論是完全端到端&#xff0c;還是專注于planner的模…

時間長了忘記jupyter的環境是哪個了

有這些但是忘記是哪個了jupyter kernelspec list查看內核路徑&#xff0c;這個內核是用來告訴jupyter 去哪找內核配置的到這個路徑下打開json文件查看使用的python環境從而確定是哪個conda環境為jupyter使用的python環境jupyter的工作原理&#xff1a;在創建conda環境后會安裝j…

PYTHON從入門到實踐-15數據可視化

數據可視化是數據分析中不可或缺的一環&#xff0c;它能夠將抽象的數據轉化為直觀的圖形&#xff0c;幫助我們更好地理解數據特征和發現潛在規律。本文將介紹如何使用Python中的Matplotlib和Plotly庫進行數據可視化&#xff0c;并通過擲骰子的概率模擬案例展示可視化的實際應用…

Spring IOC 容器 **默認注冊 Bean** 的 8 條規則

Spring IOC 容器 默認注冊 Bean 的 8 條規則 &#xff08;Spring Framework 6.x 源碼級總結&#xff09;閱讀提示&#xff1a;把下面 8 條規則背下來&#xff0c;再讀 Spring 源碼時&#xff0c;你會在任何一行代碼里立刻知道「這個 BeanDefinition 是從哪兒來的」。1?? 環境…

29.【.NET8 實戰--孢子記賬--從單體到微服務--轉向微服務】--單體轉微服務--用戶配置服務

用戶配置服務是孢子記賬中最簡單的部分。簡單說&#xff0c;用戶配置服務就是用戶自定義的配置項存儲服務&#xff0c;用于我們的APP根據用戶的配置實現指定的功能。它提供了一個簡單的接口&#xff0c;允許用戶存儲和檢索他們的配置數據。就目前來說&#xff0c;用戶配置只有一…

Python實現PDF按頁分割:靈活拆分文檔的技術指南

Python實現PDF按頁分割&#xff1a;靈活拆分文檔的技術指南 PDF文件處理是日常工作中的常見需求&#xff0c;特別是當我們需要將大型PDF文檔拆分為多個部分時。本文將介紹如何使用Python創建一個靈活的PDF分割工具&#xff0c;能夠根據用戶指定的頁數范圍任意分割文檔。 需求分…