最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳細聊聊vue組件是如何實現(xiàn)組件通訊的

 更新時間:2022年05月14日 16:09:22   作者:前端卷王小y  
組件間通信簡單來說就是組件間進行數(shù)據(jù)傳遞,就像我們?nèi)粘5拇螂娫?就是通訊的一種方式,下面這篇文章主要給大家介紹了關(guān)于vue組件是如何實現(xiàn)組件通訊的相關(guān)資料,需要的朋友可以參考下

前言

每一個組件中的變量和數(shù)據(jù)都是獨立的,如果別的組件想要訪問另一個組件里的數(shù)據(jù)該怎么做?

如何解決組件之間通訊呢?

解決方案:

可以采用父組件傳數(shù)據(jù)給子組件,還可以子組件傳數(shù)據(jù)給父組件。簡稱父傳子,子傳父。

下面詳細說說父組件是如何將數(shù)據(jù)傳給子組件的。

父傳子

理論:如果一個組件A引入并使用了另一個組件B時,那么組件A就是父組件,組件B就是子組件。

實現(xiàn)過程:

   1.在父組件中引入子組件、注冊子組件、使用子組件  
   2.在父組件中的子組件標簽上自定義一個屬性 左邊是定義的名稱,右邊是父組件中的數(shù)據(jù) 例如
   <MyCon :list="list" />
   3.在子組件中用prpos接收父組件傳來的數(shù)據(jù) 例如:prpos:['list']  注意這里面的名稱必須要和父組件
   定義的名稱一致才能可以。

原理圖示

父組件 Footer.vue

在父組件中的子組件標簽上自定義一個屬性

<template>
  <div>
    <h1>父組件傳子組件</h1>
    <!-- 使用組件   自定義屬性 -->
    <MyCon :name="name" :age="age" />
  </div>
</template>
<script>
// 引入組件 --> 創(chuàng)建組件 -->  使用組件
// 引入組件
import MyCon from "./MyCon.vue";
export default {
   //  創(chuàng)建組件 
  components: { MyCon },
  // 數(shù)據(jù)
  data() {
    return {
      name: "張三",
      age: 38,
    };
  },
};
</script>

子組件 MyCon.vue

在子組件中用prpos接收父組件傳來的數(shù)據(jù)

<template>
  <div>
    <h2>子組件</h2>
     // 直接在標簽中使用
    <p>{{ name }} {{ age }}</p>
    <button @click="fn">點擊修改props的值</button>
  </div>
</template>
<script>
export default {
  // 子組件接收父組件傳來的數(shù)據(jù)
  props: ["name", "age"],
  methods: {
    fn() {
      this.name = "傻逼譚磊";
      this.age = 20
    },
  },
};
</script>

小案例 采用了父傳子

父組件 App.vue

<template>
  <div style="border: 1px solid #ccc; margin: 5px; padding: 5px">
    <h1>父組件</h1>
    <!-- 1. 父傳。自定義屬性 -->
    <MyProduct
      v-for="item in list"
      :key="item.id"
      :price="item.proprice"
      :info="item.info"
      :goodname="item.proname"
    />
  </div>
</template>

<script>
// 導入->注冊->使用
import MyProduct from "./MyProduct.vue";
export default {
  data() {
    return {
      list: [
        {
          id: 1,
          proname: "超級好吃的棒棒糖",
          proprice: 18.8,
          info: "開業(yè)大酬賓, 全場8折",
        },
        {
          id: 2,
          proname: "超級好吃的大雞腿",
          proprice: 34.2,
          info: "好吃不膩, 快來買啊",
        },
        {
          id: 3,
          proname: "超級無敵的冰激凌",
          proprice: 14.2,
          info: "炎熱的夏天, 來個冰激凌了",
        },
      ],
    };
  },
  components: { MyProduct },
};
</script>

<style>
</style>   

子組件 MyProduct.vue

<template>
  <div style="border: 1px solid #ccc; margin: 5px; padding: 5px">
    <h2>標題: {{ goodname }}</h2>
    <p>價格: {{ price }}元</p>
    <p>{{ info }}</p>
  </div>
</template>

<script>
export default {
  props: ["goodname", "price", "info"],
};
</script>

<style>
</style>

效果展示

子傳父

實現(xiàn)過程

     1.在父組件中引入子組件、注冊子組件、使用子組件  
     2.在父組件的子組件標簽上加一個事件監(jiān)聽 例如:  <MyCon @abc="fn" />
     3.在子組件中觸發(fā)這個自定義的監(jiān)聽事件。例如:this.$emit("abc",參數(shù))

原理圖示

父組件 App.vue

在父組件的子組件標簽上加一個事件監(jiān)聽 用形參接收數(shù)據(jù)

<template>
  <div>
    <h1>父組件</h1>
    <!-- 1.添加事件監(jiān)聽 -->
    <!-- 當子組件發(fā)生了abc事件要執(zhí)行fn函數(shù) -->
    <MyCon @abc="fn" />
  </div>
</template>
<script>
// 引入子組件
import MyCon from "./MyCon.vue";
export default {
  methods: {
  // 形參接收
    fn(obj) {
      // 打印查看有沒有獲取到
      console.log("fn發(fā)生了abc事件", obj);
    },
  },
  components: { MyCon },
};
</script>

子組件 MyCon.vue

在子組件中觸發(fā)這個自定義的監(jiān)聽事件

<template>
  <div>
    <h2>子組件</h2>
    <button @click="ConFn">子傳父</button>
  </div>
</template>
<script>
export default {
  methods: {
    ConFn() {
      console.log("子組件click");
      // 2.觸發(fā)abc事件
      this.$emit("abc", { name: "吊毛譚磊" });
    },
  },
};
</script>

商品案例 運用了子傳父

父組件 App.vue

<template>
  <div style="border: 1px solid #ccc; margin: 5px; padding: 5px">
    <h1>父組件</h1>
    <!-- 1. 父傳。自定義屬性 -->
    <!-- 添加自定義事件 -->
    <MyProduct
      v-for="(item, idx) in list"
      :idx="idx"
      :key="item.id"
      :price="item.proprice"
      :info="item.info"
      :goodname="item.proname"
      @pdd="fn"
    />
  </div>
</template>

<script>
// 導入->注冊->使用
import MyProduct from "./MyProduct.vue";
export default {
  data() {
    return {
      list: [
        {
          id: 1,
          proname: "超級好吃的棒棒糖",
          proprice: 18.8,
          info: "開業(yè)大酬賓, 全場8折",
        },
        {
          id: 2,
          proname: "超級好吃的大雞腿",
          proprice: 34.2,
          info: "好吃不膩, 快來買啊",
        },
        {
          id: 3,
          proname: "超級無敵的冰激凌",
          proprice: 14.2,
          info: "炎熱的夏天, 來個冰激凌了",
        },
      ],
    };
  },
  components: { MyProduct },
  methods: {
    fn(obj) {
      console.log("父組件,收到了pdd事件", obj);
      // 計算砍了幾元 相減  再進行重新賦值
      this.list[obj.idx].proprice -= obj.ran;
    },
  },
};
</script>

<style>
</style>

子組件 MyProduct.vue

<template>
  <div style="border: 1px solid #ccc; margin: 5px; padding: 5px">
    <h2>標題: {{ goodname }}</h2>
    <p>價格: {{ price }}元</p>
    <p>{{ info }}</p>
    <button @click="bargain">隨機砍價</button>
  </div>
</template>

<script>
export default {
  // 子接收
  props: ["goodname", "price", "info", "idx"],
  methods: {
    bargain() {
      // 隨機數(shù)字
      const ran = Math.ceil(Math.random() * 10);
      // 觸發(fā)自定義事件
      // 為了知道具體是哪個商品要減少價格,所以要回傳idx下標
      this.$emit("pdd", { idx: this.idx, ran });
    },
  },
};
</script>

<style>
</style>

效果展示

總結(jié)

到此這篇關(guān)于vue組件是如何實現(xiàn)組件通訊的文章就介紹到這了,更多相關(guān)vue實現(xiàn)組件通訊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue + iView實現(xiàn)Excel上傳功能的完整代碼

    Vue + iView實現(xiàn)Excel上傳功能的完整代碼

    前一段時間項目經(jīng)歷了前端上傳文件的過程,首先進入頁面會展示默認的樣子,選中要上傳的excel文件,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,需要的朋友參考下吧
    2021-06-06
  • Vue + ts實現(xiàn)輪播插件的示例

    Vue + ts實現(xiàn)輪播插件的示例

    這篇文章主要介紹了Vue + ts實現(xiàn)輪播插件的示例,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-11-11
  • 安裝Vue+webpack出現(xiàn)的問題及解決方案

    安裝Vue+webpack出現(xiàn)的問題及解決方案

    這篇文章主要介紹了安裝Vue+webpack出現(xiàn)的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue3頁面組件中怎么獲取上一個頁面的路由地址

    vue3頁面組件中怎么獲取上一個頁面的路由地址

    這篇文章主要給大家介紹了關(guān)于vue3頁面組件中怎么獲取上一個頁面的路由地址的相關(guān)資料,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-02-02
  • Vue2 SSR渲染根據(jù)不同頁面修改 meta

    Vue2 SSR渲染根據(jù)不同頁面修改 meta

    本篇文章主要介紹了Vue2 SSR渲染根據(jù)不同頁面修改 meta,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 使用vue2實現(xiàn)帶地區(qū)編號和名稱的省市縣三級聯(lián)動效果

    使用vue2實現(xiàn)帶地區(qū)編號和名稱的省市縣三級聯(lián)動效果

    我們知道省市區(qū)縣都有名稱和對應的數(shù)字唯一編號,使用編號可以更方便查詢以及程序處理,我們今天來了解一下使用vue2來實現(xiàn)常見的省市區(qū)下拉聯(lián)動選擇效果,需要的朋友可以參考下
    2018-11-11
  • Vue 按鍵修飾符處理事件的方法

    Vue 按鍵修飾符處理事件的方法

    這篇文章主要介紹了Vue 按鍵修飾符的相關(guān)資料,vue中新增按鍵修飾符和系統(tǒng)修飾符來處理類似的事件,具體內(nèi)容詳情大家參考下本文
    2018-05-05
  • vue跳轉(zhuǎn)頁面常用的4種方法與區(qū)別小結(jié)

    vue跳轉(zhuǎn)頁面常用的4種方法與區(qū)別小結(jié)

    這篇文章主要給大家介紹了關(guān)于vue跳轉(zhuǎn)頁面常用的4種方法與區(qū)別,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-03-03
  • vue3封裝輪播圖組件的方法

    vue3封裝輪播圖組件的方法

    這篇文章主要為大家詳細介紹了vue3封裝輪播圖組件的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue3實現(xiàn)監(jiān)聽store中state狀態(tài)變化的簡單方法

    vue3實現(xiàn)監(jiān)聽store中state狀態(tài)變化的簡單方法

    這篇文章主要給大家介紹了關(guān)于vue3實現(xiàn)監(jiān)聽store中state狀態(tài)變化的簡單方法,store是一個狀態(tài)管理工具,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10

最新評論

余干县| 龙川县| 南丰县| 万盛区| 平乡县| 永嘉县| 新干县| 岳西县| 卓尼县| 安远县| 崇州市| 潮安县| 洪江市| 淮滨县| 谷城县| 安阳市| 尤溪县| 阳原县| 德令哈市| 临夏县| 余庆县| 文昌市| 芦溪县| 百色市| 绥化市| 巩留县| 成都市| 霍州市| 吴堡县| 新余市| 同德县| 合川市| 盐山县| 平江县| 山东| 吴堡县| 平和县| 巴南区| 高碑店市| 荥经县| 峨边|