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

Vue組件之間四種通信方式詳解

 更新時(shí)間:2022年01月10日 15:15:19   作者:℡_牽伴 ※  
vue框架提供了前端開(kāi)發(fā)組件的思想,可以通過(guò)組件來(lái)組合成一個(gè)完整的頁(yè)面,都是隨著組件數(shù)量原來(lái)越多,組件之間難免需要相互通信。本文將為大家介紹四種組件間的通信方式,需要的可以參考一下

前言

vue 框架提供了前端開(kāi)發(fā)組件的思想,可以通過(guò)組件來(lái)組合成一個(gè)完整的頁(yè)面,都是隨著組件數(shù)量原來(lái)越多,組件之間難免需要相互通信,那么如何實(shí)現(xiàn)組件之間的通信呢?下面介紹 vue 組件通信的幾種方法

父子組件通信?

父組件傳遞 props 給子組件(數(shù)據(jù)以及改變數(shù)據(jù)的方法),子組件通過(guò) $emit 來(lái)更新父組件的狀態(tài)

父組件定義,聲明狀態(tài) { name: 'baidu.com' } 以及可以改變狀態(tài)的方法update(),通過(guò) name 傳遞和 @update 把 name 屬性和 update 方法傳遞給子組件

<template>
  <div>
    <Child : @update="update" />
  </div>
</template>

<script>
  import Child from "./components/Child";

  export default {
    name: "App",
    components: {
      Child,
    },
    data() {
      return {
        name: "baidu.com",
      };
    },
    methods: {
      update() {
        this.name = "www.baidu.com";
      },
    },
  };
</script>vue


子組件的定義,定義 props 接收 name 屬性,通過(guò) $emit 傳遞 update 參數(shù)通知父組件更新?tīng)顟B(tài)

<template>
  <div>
    {{ name }}
    <button @click="$emit('update')">通知父組件數(shù)據(jù)</button>
  </div>
</template>

<script>
  export default {
    name: "Child",
    props: {
      name: String,
    },
  };
</script>

父組件與子孫組件的通信?

父組件通過(guò) provide 創(chuàng)建對(duì)象,子組件通過(guò) inject 來(lái)使用父組件的數(shù)據(jù),不受組件層級(jí)的限制

父組件通過(guò) provide 定義需要傳遞是數(shù)據(jù)

<template>
  <div>
    <Child />
  </div>
</template>

<script>
  import Child from "./components/Child";

  export default {
    name: "App",
    components: {
      Child,
    },
    provide: {
      name: "www.baidu.com",
    },
  };
</script>

子組件通過(guò) inject 屬性控制哪些屬性需要訪問(wèn)

<template>
  <div>{{ name }}</div>
</template>

<script>
  export default {
    name: "Child",
    inject: ["name"],
  };
</script>

父組件獲取子組件數(shù)據(jù)?

通過(guò)ref 來(lái)獲取子組件的實(shí)例,可以獲取子組件的狀態(tài)或者調(diào)用子組件的方法,例如下面

<template>
  <div>
    <Child ref="child" />
  </div>
</template>

<script>
  import Child from "./components/Child";

  export default {
    name: "App",
    components: {
      Child,
    },
    mounted() {
      console.log(this.$refs.child.title);
    },
  };
</script>

可以通過(guò) this.$refs.child 獲取到 Child 組件的實(shí)例,訪問(wèn) Child 組件的 data

無(wú)需考慮組件關(guān)系的通信?

通過(guò) vue 提供的發(fā)布訂閱模式,也叫做 EventBus(事件總線)

定義一個(gè) eventBus 實(shí)例

import Vue from "vue";
export default new Vue();

父組件在 mounted 生命周期里面通過(guò) $on 監(jiān)聽(tīng) update 事件

<template>
  <div>
    <Child : />
  </div>
</template>

<script>
  import Child from "./components/Child";
  import eBus from "../eventBus";

  export default {
    name: "App",
    data() {
      return {
        name: "baidu.com",
      };
    },
    components: {
      Child,
    },
    mounted() {
      eBus.$on("update", (val) => {
        
        this.name = val;
      });
    },
  };
</script>

子組件通過(guò) vue 實(shí)例的 $emit 觸發(fā) update 事件

<template>
  <div>
    {{ name }}
    <button @click="clickHandle">通知父組件更新</button>
  </div>
</template>

<script>
  import eBus from "../../eventBus";

  export default {
    name: "Child",
    props: {
      name: String,
    },
    data() {
      return {
        title: "child component",
      };
    },
    methods: {
      clickHandle() {
        
        eBus.$emit("update", "Hello World");
      },
    },
  };
</script>

使用全局狀態(tài)管理庫(kù) vuex

具體就不在這里展開(kāi)講,有興趣的可以查閱 vue 官方文檔

到此這篇關(guān)于Vue組件之間四種通信方式詳解的文章就介紹到這了,更多相關(guān)Vue組件通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue3動(dòng)態(tài)路由刷新出現(xiàn)空白頁(yè)的原因與最優(yōu)解

    vue3動(dòng)態(tài)路由刷新出現(xiàn)空白頁(yè)的原因與最優(yōu)解

    頁(yè)面刷新白屏其實(shí)是因?yàn)関uex引起的,由于刷新頁(yè)面vuex數(shù)據(jù)會(huì)丟失,這篇文章主要給大家介紹了關(guān)于vue3動(dòng)態(tài)路由刷新出現(xiàn)空白頁(yè)的原因與最優(yōu)解的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Vue2.0實(shí)現(xiàn)簡(jiǎn)單分頁(yè)及跳轉(zhuǎn)效果

    Vue2.0實(shí)現(xiàn)簡(jiǎn)單分頁(yè)及跳轉(zhuǎn)效果

    這篇文章主要為大家詳細(xì)介紹了Vue2.0實(shí)現(xiàn)簡(jiǎn)單數(shù)據(jù)分頁(yè),及頁(yè)數(shù)的跳轉(zhuǎn)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Vue運(yùn)用transition實(shí)現(xiàn)過(guò)渡動(dòng)畫

    Vue運(yùn)用transition實(shí)現(xiàn)過(guò)渡動(dòng)畫

    vue的過(guò)渡動(dòng)畫,主要是transition標(biāo)簽的使用,配合css動(dòng)畫實(shí)現(xiàn)的。接下來(lái)通過(guò)本文給大家分享Vue運(yùn)用transition實(shí)現(xiàn)過(guò)渡動(dòng)畫效果,感興趣的朋友一起看看吧
    2019-05-05
  • Vue2.0使用過(guò)程常見(jiàn)的一些問(wèn)題總結(jié)學(xué)習(xí)

    Vue2.0使用過(guò)程常見(jiàn)的一些問(wèn)題總結(jié)學(xué)習(xí)

    本篇文章主要介紹了Vue2.0使用過(guò)程常見(jiàn)的一些問(wèn)題總結(jié)學(xué)習(xí),詳細(xì)的介紹了使用中會(huì)遇到的各種錯(cuò)誤,有興趣的可以了解一下。
    2017-04-04
  • vue之組件內(nèi)監(jiān)控$store中定義變量的變化詳解

    vue之組件內(nèi)監(jiān)控$store中定義變量的變化詳解

    今天小編就為大家分享一篇vue之組件內(nèi)監(jiān)控$store中定義變量的變化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 深入詳解Vue3中的Mock數(shù)據(jù)模擬

    深入詳解Vue3中的Mock數(shù)據(jù)模擬

    這篇文章主要為大家介紹了深入Vue3中的Mock數(shù)據(jù)模擬實(shí)現(xiàn)細(xì)節(jié)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • vue實(shí)現(xiàn)點(diǎn)擊復(fù)制到粘貼板

    vue實(shí)現(xiàn)點(diǎn)擊復(fù)制到粘貼板

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)點(diǎn)擊復(fù)制到粘貼板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Vue前端打包的詳細(xì)流程

    Vue前端打包的詳細(xì)流程

    這篇文章主要介紹了Vue前端打包的詳細(xì)流程,下面文章圍繞Vue前端打包的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)大家有所幫助
    2021-11-11
  • vue3中的this.$set寫法舉例

    vue3中的this.$set寫法舉例

    在Vue2中,由于數(shù)據(jù)響應(yīng)式是利用object.definedProperty()實(shí)現(xiàn)的,無(wú)法深層監(jiān)聽(tīng)數(shù)據(jù)變化,因此提供了$set方法來(lái)解決數(shù)據(jù)變化視圖未實(shí)時(shí)更新的問(wèn)題,然而,在Vue3中,數(shù)據(jù)響應(yīng)式使用ES6的proxy進(jìn)行數(shù)據(jù)代理,因此廢棄了$set的概念
    2024-10-10
  • Vue實(shí)現(xiàn)百度下拉提示搜索功能

    Vue實(shí)現(xiàn)百度下拉提示搜索功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)百度下拉提示搜索功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評(píng)論

大安市| 太保市| 尼玛县| 达日县| 佛教| 聊城市| 莱芜市| 驻马店市| 翼城县| 滨海县| 喀喇沁旗| 顺义区| 景德镇市| 涟水县| 蒲城县| 福泉市| 龙岩市| 兴和县| 永顺县| 安平县| 修武县| 探索| 灵宝市| 黎平县| 宁安市| 定安县| 个旧市| 运城市| 衡阳县| 噶尔县| 富平县| 宾川县| 白银市| 宜君县| 蒲城县| 漯河市| 云和县| 西丰县| 崇明县| 汾阳市| 甘洛县|