Vue組件通信的六種方式,你會幾個?

来源:https://www.cnblogs.com/chengxuyuanaa/archive/2020/06/16/13140017.html
-Advertisement-
Play Games

在平時的開發過程中,父子 / 兄弟組件間的通信是肯定會遇到的啦,所以這裡總結了 6 種 Vue 組件的通信props / $e$emit / Vuex$attrs / $listeners $parent / $children 與 ref provide / inject 前言 如上圖所示,A/B ...


在平時的開發過程中,父子 / 兄弟組件間的通信是肯定會遇到的啦,所以這裡總結了 6 種 Vue 組件的通信props / $e$emit / Vuex$attrs / $listeners

  1. $parent / $children 與 ref

  2. provide / inject

前言

 

 

如上圖所示,A/B,B/C,B/D 組件是父子關係,C/D 是兄弟關係。那如何根據不同的使用場景,選擇不同的通信方式呢?所以前提就是我們要瞭解不同的通信方式的作用和區別。

一. props / $emit

這個是我們平時用得比較多的方式之一,父組件 A 通過 props 參數向子組件 B 傳遞數據,B 組件通過 $emit 向 A 組件發送一個事件(攜帶參數數據),A組件中監聽 $emit 觸發的事件得到 B 向 A 發送的數據。 我們來具體解釋下它的實現步驟:

1:父組件向子組件傳值

// App.vue 父組件
<template>
    <a-compontent :data-a="dataA"></a-compontent>
</template>
<script>
import aCompontent from './components/A.vue';
export default {
    name: 'app',
    compontent: { aCompontent },
    data () {
        return {
            dataA: 'dataA數據'
        }
    }
}
// aCompontent 子組件
<template>
    <p>{{dataA}}</p> // 在子組件中把父組件傳遞過來的值顯示出來
</template>
<script>
export default {
    name: 'aCompontent',
    props: {
        dataA: {           //這個就是父組件中子標簽自定義名字
            type: String,
            required: true  // 或者false
        }
    }
}
</script>
複製代碼

2:子組件向父組件傳值(通過事件方式)

// 子組件
<template>
    <p @click="sendDataToParent">點擊向父組件傳遞數據</p>
</template>
<script>
export default {
    name: 'child',
    methods:{
        changeTitle() {
            this.$emit('sendDataToParent','這是子組件向父組件傳遞的數據'); // 自定義事件,會觸發父組件的監聽事件,並將數據以參數的形式傳遞
        }
    }
}

// 父組件
<template>
    <child @sendDataToParent="getChildData"></child>
</template>
<script>
import child from './components/child.vue';
export default {
    name: 'child',
    methods:{
        getChildData(data) {
            console.log(data); // 這裡的得到了子組件的值
        }
    }
}
</script>
複製代碼

二. $emit / $on

這種方式是通過一個類似 App.vue 的實例作為一個模塊的事件中心,用它來觸發和監聽事件,如果把它放在 App.vue 中,就可以很好的實現任何組件中的通信,但是這種方法在項目比較大的時候不太好維護。

舉個

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 平時用this有些混亂,所以寫個總結。 沒有箭頭函數之前,我們說this就是函數運行時所在的環境對象,但是在箭頭函數中this就是定義時所在的對象,先說大家熟知的:函數運行時所在的環境對象。 1、作為函數調用,this指向全局對象 2、作為對象的方法調用,該對象即為調用上下文,this指向該對象。 ...
  • iview DatePicker daterange data month UTC格式化問題 ...
  • npm install 裝包時提示Error EACCES permission denied解決辦法 ...
  • 1 <div class="pie" style="width:500px;height:500px;"></div> 2 3 <div class="line" style="width:500px;height:500px;"></div> 4 5 <script type="text/java ...
  • layui 是什麼? 是一個ui庫 UI設計(或稱界面設計)是指對軟體的人機交互、操作邏輯、界面美觀的整體設計。UI設計分為實體UI和虛擬UI,互聯網常用的UI設計是虛擬UI,UI即User Interface(用戶界面)的簡稱。 大致內容 觀察layui文件內的內部結構 ├─css //css目錄 ...
  • 前端早早聊大會,前端成長的新起點,與掘金聯合舉辦。 本文 是前端早早聊的第 45 位講師 ,也是第六屆 - Serverless 專場,來自閑魚前端團隊的丹俠的分享 - 講稿簡要整理版(完整版含演示請看錄播視頻和 PPT): 概述 今天給大家分享一下閑魚如何在現有產品中落地 FaaS,希望我們的實踐 ...
  • readyState document.readyState 返回當前文檔的狀態 屬性如下: uninitialized 還未開始載入 loading 載入中 interactive 已載入,文檔與用戶可以開始交互 complete 載入完成 DOMContentLoaded 當 DOMConten ...
  • 幾天前一個小伙伴問我 Object.getOwnPropertyNames() 是乾什麼用的 平時還真沒有使用到這個方法,一時不知如何回答 從方法名稱來分析,應該是返回的是對象自身屬性名組成的數組 那和 Object.keys() 方法不就一樣了嗎 感覺事情並不這麼簡單,於是我仔細看了一下這幾種遍歷 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...