父子間組件通信

来源:https://www.cnblogs.com/wanker/archive/2023/08/04/17605534.html
-Advertisement-
Play Games

1、父傳子( 定義:父傳子使用的是 props ) ① 首先確定父組件和子組件,然後在父組件中引入子組件,註冊並使用; 父組件代碼如下: <template> <div> <h1>父組件</h1> <!-- 使用子組件 --> <ChildView></ChildView> </div> </tem ...


1、父傳子( 定義:父傳子使用的是 props )

① 首先確定父組件和子組件,然後在父組件中引入子組件,註冊並使用;

父組件代碼如下:

<template>
  <div>
    <h1>父組件</h1>
    <!-- 使用子組件 -->
    <ChildView></ChildView>
  </div>
</template>
<script>
// 引入子組件
import ChildView from "../components/child/child1.vue";
export default {
  name: "FatherView",
  components: {
    // 註冊子組件
    ChildView,
  }
};
</script>

子組件代碼如下:

<template>
  <div>
    <h1>子組件</h1>
  </div>
</template>
<script>
export default {
  name: "ChildView",
  components: {},
};
</script>

② 然後在父組件的data裡面定義需要傳遞給子組件的數據以及methods裡面的自定義事件;

//傳遞的數據
data() {
    return {
      list: [1, 2, 3, 4, 5],
      title: "wanjie",
      age: 22,
      sex: 1,
    };
  },
  methods: {
    // 自定義事件
    myHander(v) {
      console.log("myHander", v);
    },
  },

③ 通過給子組件標簽上自定義數據和事件進行輸送;

 <!-- props綁定的屬性和事件 -->
    <ChildView
      :title="title"
      :list="list"
      :age="age"
      :sex="sex"
      @myHander="myHander"
    ></ChildView>

④ 子組件接受數據需要在script中定義一個與data平級的props,在props數組的內部來進行接收;

  //聲明props
  //這裡的兩個值需要和父組件傳過來的值相同,否則就會報錯
  props: ["title", "list"],
  data() {
    return {};
  },

 ⑤ 子組件在頁面上顯示,直接this.屬性名就可以獲取到;

  <p>{{ this.title }}</p>

⑥ 如果沒有在子組件的props裡面聲明接收,可以使用 $attrs 獲取到傳遞的數據、$listeners 獲取自定義事件;

console.log("child", this.list);    //輸出結果為:child [1, 2, 3, 4, 5]
console.log("其他沒有聲明的props在:", this.$attrs);      //輸出結果為:其他沒有聲明的props在: {age: 22, sex: 1}
console.log("沒有使用的事件:event", this.$listeners);   //輸出結果為:沒有使用的事件:event {myHander: ƒ}

完整父組件代碼如下:

<template>
  <div>
    <h1>父組件</h1>
    <!-- 使用子組件 -->
    <!-- props綁定的屬性和事件 -->
    <ChildView
      :title="title"
      :list="list"
      :age="age"
      :sex="sex"
      @myHander="myHander"
    ></ChildView>
  </div>
</template>
<script>
// 引入子組件
import ChildView from "../components/child/child1.vue";
export default {
  name: "FatherView",
  components: {
    // 註冊子組件
    ChildView,
  },
  mixins: [],
  props: {},
  data() {
    return {
      list: [1, 2, 3, 4, 5],
      title: "wanjie",
      age: 22,
      sex: 1,
    };
  },
  methods: {
    // 自定義事件
    myHander(v) {
      console.log("myHander", v);
    },
  },
};
</script>

完整子組件代碼如下:

<template>
  <div>
    <h1>子組件</h1>
    <p>{{ this.title }}</p>
    <button type="button" @click="fn">父傳子</button>
  </div>
</template>
<script>
export default {
  name: "ChildView",
  components: {
  },
  mixins: [],
  //聲明props
  //這裡的兩個值需要和父組件傳過來的值相同,否則就會報錯
  props: ["title", "list"],
  data() {
    return {};
  },
  mounted() {
    // 列印測試
    console.log("child", this.title); //child wanjie
    console.log("child", this.list); //child [1, 2, 3, 4, 5]
    console.log("其他沒有聲明的props在:", this.$attrs); //其他沒有聲明的props在: {age: 22, sex: 1}
    console.log("沒有使用的事件:event", this.$listeners); //沒有使用的事件:event {myHander: ƒ}
  },
  methods: {
    fn() {
      this.$emit("myHander", 123);  
    },
  },
};
</script>

2、子傳父( 定義:父傳子使用的是 emit )

① 首先確定父組件和子組件,然後在父組件中引入子組件,註冊並使用;

② 然後在子組件的data裡面定義需要傳遞給父組件的數據以及methods裡面的自定義事件;

③ 在子組件裡面定義一個方法傳值 $emit ("第一個參數為自定義方法名",第二個參數為需要傳遞的值);

  methods: {
    fn() {
      this.$emit("pass", this.name);
    },
  },

父組件代碼如下:

<template>
  <div>
    <h1>父組件</h1>
    <!-- 使用子組件 -->
    <AboutList></AboutList>
  </div>
</template>
<script>
// 引入子組件
import AboutList from "../components/children/AboutList";
export default {
  name: "AboutView",
  // 註冊引入的子組件
  components: {
    AboutList,
  },
  data() {
    return {};
  },
  methods: {},
};
</script>

子組件代碼如下:

<template>
  <div>
    <h2>子組件</h2>
    <button type="button" @click="fn">子傳父</button>
  </div>
</template>
<script>
export default {
  name: "AboutList",
  components: {},
  data() {
    return {
   // 傳遞給父組件的值
      list: [1, 2, 3, 4, 5],
      name: "wj",
      sex: 12,
    };
  },
  methods: {
   // 自定義事件
    fn() {
      this.$emit("pass", this.name);
    },
  },
};
</script>

④ 在父組件定義一個自定義事件接收子組件傳遞過來的事件、data裡面定義一個來接收數據;

 data() {
    return {
      dataList: [],
    };
  },
  methods: {
    getList(val) {
      this.dataList = val;
      console.log("子組件傳遞迴來的數據", this.dataList);
    },
  },

註意:自定義事件的等於號前面@pass需和子組件自定義方法名一樣;等於號後面為父組件自定義方法名,需和下方的方法名對應。

子組件代碼:

  methods: {
    fn() {
      this.$emit("pass", this.name);
    },
  },

父組件代碼:

 <AboutList @pass="getList"></AboutList>

 // 接收自定義事件
 methods: {
    getList(val) {
      this.dataList = val;
      console.log("子組件傳遞迴來的數據", this.dataList);
    },
  },

完整的父組件代碼如下:

<template>
  <div>
    <h1>父組件</h1>
    <!-- 使用子組件 -->
    <AboutList @pass="getList"></AboutList>
    <p>name:{{ dataList }}</p>
  </div>
</template>
<script>
// 引入子組件
import AboutList from "../components/children/AboutList";
export default {
  name: "AboutView",
  // 註冊引入的子組件
  components: {
    AboutList,
  },
  data() {
    return {
      dataList: [],
    };
  },
  methods: {
    getList(val) {
      this.dataList = val;
      console.log("子組件傳遞迴來的數據", this.dataList);  //輸出結果為:子組件傳遞迴來的數據 wj
    },
  },
};
</script>

完整的子組件代碼如下:

<template>
  <div>
    <h2>子組件</h2>
    <button type="button" @click="fn">子傳父</button>
  </div>
</template>
<script>
export default {
  name: "AboutList",
  components: {},
  data() {
    return {
      list: [1, 2, 3, 4, 5],
      name: "wj",
      sex: 12,
    };
  },
  methods: {
    fn() {
      this.$emit("pass", this.name);
    },
  },
};
</script>

 


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

-Advertisement-
Play Games
更多相關文章
  • **原文鏈接:** [使用 RediSearch 在 Redis 中進行全文檢索](https://mp.weixin.qq.com/s/X1qKL0jMaklGw6GLcrkp2g) Redis 大家肯定都不陌生了,作為一種快速、高性能的鍵值存儲資料庫,廣泛應用於緩存、隊列、會話存儲等方面。 然而 ...
  • #### 第3句 今日流失用戶 ##### 需求: 當日流失用戶的定義:昨天登錄的,今天沒登錄的用戶數 有一張用戶登錄日誌表,有欄位 date_stamp(日期時間戳),用戶id(uid)。如果用戶在某天登錄了,該表會有一條記錄。 ``` #今天流失人數:昨天登錄,今天沒登錄的 select a.d ...
  • TopSQL為DWS的監控系統,記錄DWS中各個作業、運算元級別的資源使用數據、耗時數據,包括下盤信息、記憶體、網路、耗時、警告、基礎信息等作業執行的數據。 ...
  • ![file](https://img2023.cnblogs.com/other/2685289/202308/2685289-20230803180034435-79319118.png) ## 導讀 國內某頭部券商是國內排名前三的全國性大型綜合證券公司。作為證券行業領頭羊之一,該券商一直高度重 ...
  • 本文分享自華為雲社區《如何為物聯網設備註入“華為雲+鴻蒙DNA”?看華為雲IoT怎麼答【華為雲IoT +鴻蒙】》,作者: 華為IoT雲服務。 根據市場咨詢機構預測,2025年全球物聯網設備將達到252億個。但各種智能設備大多都有一套自己的系統,而且互相“孤立”,無法交流。鴻蒙的到來,就是要用同一套語 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 發現很多人還只會promise常規用法 在js項目中,promise的使用應該是必不可少的,但我發現在同事和麵試者中,很多中級或以上的前端都還停留在promiseInst.then()、promiseInst.catch()、Promis ...
  • 在JavaScript語言里有個 Math.random() 隨機函數,用於生成指定範圍內的隨機數。 #### Math.random()函數 根據官方的定義: **Math.random()** 函數返回一個浮點數, 偽隨機數在範圍[0,1),也就是說,從0(包括0)往上,但是不包括1(排除1), ...
  • 一、js有如下:1、string類型;2、number類型;3、boolean類型;4、null類型;5、undefined類型;6、Object類型;7、Array類型;8、Function類型;9、Symbol類型。共九種數據類型。js把數據類型分為“基本數據類型”和“引用數據類型”。其中6、7 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...