欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue父子組件之間的通信實(shí)例詳解

 更新時(shí)間:2018年09月28日 08:25:38   作者:半指溫柔樂(lè)  
在vue組件通信中其中最常見(jiàn)通信方式就是父子組件之中的通信,而父子組件的設(shè)定方式在不同情況下又各有不同。這篇文章主要介紹了Vue---父子組件之間的通信,需要的朋友可以參考下

 在vue組件通信中其中最常見(jiàn)通信方式就是父子組件之中的通信,而父子組件的設(shè)定方式在不同情況下又各有不同。最常見(jiàn)的就是父組件為控制組件子組件為視圖組件。父組件傳遞數(shù)據(jù)給子組件使用,遇到業(yè)務(wù)邏輯操作時(shí)子組件觸發(fā)父組件的自定義事件。無(wú)論哪種組織方式父子組件的通信方式都是大同小異。

一、父組件到子組件通訊

  父組件到子組件的通訊主要為:子組件接受使用父組件的數(shù)據(jù),這里的數(shù)據(jù)包括屬性和方法(String,Number,Boolean,Object, Array ,Function)。vue提倡單項(xiàng)數(shù)據(jù)流,因此在通常情況下都是父組件傳遞數(shù)據(jù)給子組件使用,子組件觸發(fā)父組件的事件,并傳遞給父組件所需要的參數(shù)。

1、通過(guò)props傳遞數(shù)據(jù)

父子通訊中最常見(jiàn)的數(shù)據(jù)傳遞方式就是通過(guò)props傳遞數(shù)據(jù),就好像方法的傳參一樣,父組件調(diào)用子組件并傳入數(shù)據(jù),子組件接受到父組件傳遞的數(shù)據(jù)進(jìn)行驗(yàn)證使用。

<!--父組件-->
 <template>
  <div>
   <h2>父組件</h2>
   <br>
   <Child-one :parentMessage="parentMessage"></Child-one>
  </div>
 </template>
 <script>
  import ChildOne from './ChildOne';
 
  export default{
   components: {
    ChildOne,
   },
   data() {
    return {
     parentMessage: '我是來(lái)自父組件的消息',
    };
   },
  };
 </script>
 <style scoped>
 </style>

 <!--子組件-->
 <template>
  <div>
   <h3>我是子組件一</h3>
   <span>{{parentMessage}}</span>
  </div>
 </template>
 <script>
  export default{
   props: ['parentMessage'],
  };
 </script>
 <style scoped>
 </style>

props可以接受function,所以function也可以以這種方式傳遞到子組件使用。

2、通過(guò)$on傳遞父組件方法

通過(guò)$on傳遞父組件方法是組件通信中常用的方法傳遞方式。它可以與通過(guò)props傳遞方法達(dá)到相同的效果。相比于props傳遞function,它更加的直觀和顯示的表現(xiàn)出了調(diào)用關(guān)系。

<!--父組件-->
 <template>
  <div>
   <h2>父組件</h2>
   <br>
   <Child-one @childEvent="parentMethod"></Child-one>
  </div>
 </template>
 <script>
  import ChildOne from './ChildOne';
 
  export default{
   components: {
    ChildOne,
   },
   data() {
    return {
     parentMessage: '我是來(lái)自父組件的消息',
    };
   },
   methods: {
    parentMethod() {
     alert(this.parentMessage);
    },
   },
  };
 </script>
 <style scoped>
 </style>

 <!--子組件-->
 <template>
  <div>
   <h3>我是子組件一</h3>
  </div>
 </template>
 <script>
  export default{
   mounted() {
    this.$emit('childEvent');
   },
  };
 </script>
 <style scoped>
 </style>

3、獲取父組件然后使用父組件中的數(shù)據(jù)(不推薦)

準(zhǔn)確來(lái)說(shuō)這種方式并不屬于數(shù)據(jù)的傳遞而是一種主動(dòng)的查找。父組件并沒(méi)有主動(dòng)的傳遞數(shù)據(jù)給子組件,而是子組件通過(guò)與父組件的關(guān)聯(lián)關(guān)系,獲取了父組件的數(shù)據(jù)。

 該方法雖然能實(shí)現(xiàn)獲取父組件中的數(shù)據(jù)但是不推薦這種方式,因?yàn)関ue提倡單向數(shù)據(jù)流,只有父組件交給子組件的數(shù)據(jù)子組件才有使用的權(quán)限,不允許子組件私自獲取父組件的數(shù)據(jù)進(jìn)行使用。在父與子的關(guān)系中子應(yīng)當(dāng)是處于一種被動(dòng)關(guān)系。

 this.$parent

此處的this為子組件實(shí)例

二、子組件到父組件通訊

  子組件到父組件的通訊主要為父組件如何接受子組件之中的數(shù)據(jù)。這里的數(shù)據(jù)包括屬性和方法(String,Number,Boolean,Object, Array ,Function)。

1、通過(guò)$emit傳遞父組件數(shù)據(jù)

與父組件到子組件通訊中的$on配套使用,可以向父組件中觸發(fā)的方法傳遞參數(shù)供父組件使用。

<!--父組件-->
 <template>
  <div>
   <h2>父組件</h2>
  <br>
   <Child-one @childEvent="parentMethod"></Child-one>
  </div>
 </template>
 <script>
  import ChildOne from './ChildOne';
  export default{
   components: {
    ChildOne,
   },
   data() {
    return {
     parentMessage: '我是來(lái)自父組件的消息',
    };
   },
   methods: {
    parentMethod({ name, age }) {
     console.log(this.parentMessage, name, age);
    },
   },
  };
 </script>
 <style scoped>
 </style>

 <!--子組件-->
 <template>
  <div>
   <h3>我是子組件一</h3>
  </div>
 </template>
 <script>
  export default{
   mounted() {
    this.$emit('childEvent', { name: 'zhangsan', age: 10 });
   },
  };
 </script>
 <style scoped>
 </style>

2、refs獲取

可以通過(guò)在子組件添加ref屬性,然后可以通過(guò)ref屬性名稱獲取到子組件的實(shí)例。準(zhǔn)確來(lái)說(shuō)這種方式和this.$parent一樣并不屬于數(shù)據(jù)的傳遞而是一種主動(dòng)的查找。

 盡量避免使用這種方式。因?yàn)樵诟缸咏M件通信的過(guò)程中。父組件是處于高位是擁有控制權(quán),而子組件在多數(shù)情況下應(yīng)該為純視圖組件,只負(fù)責(zé)視圖的展示和自身視圖的邏輯操作。對(duì)外交互的權(quán)利應(yīng)該由父組件來(lái)控制。所以應(yīng)當(dāng)由父組件傳遞視圖數(shù)據(jù)給子組件,子組件負(fù)責(zé)展示。而子組件的對(duì)外交互通過(guò)$emit觸發(fā)父組件中相應(yīng)的方法,再由父組件處理相應(yīng)邏輯。

<template>
  <div>
   <h2>父組件</h2>
   <br>
   <Child-one ref="child"></Child-one>
  </div>
 </template>
 <script>
  import ChildOne from './ChildOne';
  export default{
   components: {
    ChildOne,
   },
   mounted(){
    console.log(this.$refs['child']);
   },
  };
 </script>
 <style scoped>
 </style>
 this.$refs['child']

總結(jié)

以上所述是小編給大家介紹的Vue父子組件之間的通信,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Vue中自定義標(biāo)簽及其使用方式

    Vue中自定義標(biāo)簽及其使用方式

    這篇文章主要介紹了Vue中自定義標(biāo)簽及其使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue如何封裝選擇文件組件和選擇文件api

    vue如何封裝選擇文件組件和選擇文件api

    這篇文章主要介紹了vue如何封裝選擇文件組件和選擇文件api問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • vue3.0實(shí)現(xiàn)下拉菜單的封裝

    vue3.0實(shí)現(xiàn)下拉菜單的封裝

    這篇文章主要為大家詳細(xì)介紹了vue3.0實(shí)現(xiàn)下拉菜單的封裝代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue項(xiàng)目中引入vue-datepicker插件的詳解

    vue項(xiàng)目中引入vue-datepicker插件的詳解

    這篇文章主要介紹了vue項(xiàng)目中引入vue-datepicker插件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue 內(nèi)聯(lián)樣式style中的background用法說(shuō)明

    vue 內(nèi)聯(lián)樣式style中的background用法說(shuō)明

    這篇文章主要介紹了vue 內(nèi)聯(lián)樣式style中的background用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue、element實(shí)現(xiàn)表格表頭縱向顯示方式

    vue、element實(shí)現(xiàn)表格表頭縱向顯示方式

    這篇文章主要介紹了vue、element實(shí)現(xiàn)表格表頭縱向顯示方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 解決Vue3?echarts?v-show無(wú)法重新渲染的問(wèn)題

    解決Vue3?echarts?v-show無(wú)法重新渲染的問(wèn)題

    這篇文章主要介紹了Vue3?echarts?v-show無(wú)法重新渲染的問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • 解讀element?el-upload上傳的附件名稱不顯示?file-list賦值

    解讀element?el-upload上傳的附件名稱不顯示?file-list賦值

    這篇文章主要介紹了解讀element?el-upload上傳的附件名稱不顯示?file-list賦值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue-cli3項(xiàng)目引入Typescript的實(shí)現(xiàn)方法

    Vue-cli3項(xiàng)目引入Typescript的實(shí)現(xiàn)方法

    這篇文章主要介紹了Vue-cli3項(xiàng)目引入Typescript的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 完美解決vue 項(xiàng)目開(kāi)發(fā)越久 node_modules包越大的問(wèn)題

    完美解決vue 項(xiàng)目開(kāi)發(fā)越久 node_modules包越大的問(wèn)題

    這篇文章主要介紹了vue 項(xiàng)目開(kāi)發(fā)越久 node_modules包越大的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09

最新評(píng)論