首頁 >web前端 >js教程 >vue父子元件同步傳遞和非同步傳遞的介紹(附程式碼)

vue父子元件同步傳遞和非同步傳遞的介紹(附程式碼)

不言
不言轉載
2019-02-13 09:53:343408瀏覽

這篇文章帶給大家的內容是關於vue父子元件同步傳遞和非同步傳遞的介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

1、同步傳遞資料

父元件food 透過props 把值為0 的type 欄位傳給子元件,子元件在初始化時可以拿到type 字段,渲染出字元「0 水果」

// 父组件 food.vue
<template>
  <apple :type="type"></apple>
</template>
<script>
    data (){
        return {
          type: 0
      };
      }
</script>
// 子组件 apple.vue
<template>
  <span>{{childType}}</span>
</template>
<script>
   props: ['type'],
   created () {
           this.childType = this.formatterType(type);
   },
   method () {
           formatterType (type) {
        if (type === 0) {
          return "0 水果";
        }
        if (type === 1) {
          return "1 蔬菜";
        }
        return '';
      }
   }
</script>

2 異步傳遞數據

要保證異步傳遞數據,根據VUE的雙向綁定原理,不難得知,異步傳遞的數據需要watch。

2.1 props

若props傳遞的資料關聯到範本中,元件初始化時會watch該資料。可見下面程式碼中的type和info。
若props傳遞的資料不關聯到模板,則為props傳遞的資料新增watch,在watch方法中修改關聯模板的物件。可見下面程式碼中的child_type。此方法中,watch監聽到的是發生變化的props,故需要對目標物件做初始化處理。

// 父组件 food.vue
<template>
  <apple :type="type" :info="info"></apple>
</template>
<script>
  data (){
    return {
      type: 0,
      info: {comment: 'ugly food'}
    };
  }
  created () {
      setTimeout (()=>{
        this.type = 1;
      this.info = {comment: 'tasty food'};
    },1000);
  }
</script>
// 子组件 apple.vue
<template>
  <p class="memuManage">
    <span>type: {{child_type}}</span>
    <span>type: {{type|formatterType}}</span>
    <span>info: {{info.comment}}</span>
  </p>
</template>
<script>
  export default {
    data () {
      return {
        child_type: ''
      };
    },
    props: ["type","info"],
    watch: {
      type (newVal) {
        this.child_type = this.formatterType(newVal);
      }
    },
    created () {
      this.child_type = this.formatterType(this.type);
    },
    filters: {
      formatterType: function (type) {
        if (type === 0) {
          return "0 水果";
        }
        if (type === 1) {
          return "1 蔬菜";
        }
        return '';
      }
    },
    methods: {
      formatterType (type) {
        if (type === 0) {
          return "0 水果";
        }
        if (type === 1) {
          return "1 蔬菜";
        }
        return '';
      }
    }
  };
</script>

2.2 vuex

資料存放在store中,父元件呼叫vuex中的方法改變資料。
若store的資料關聯子元件的模板,則子元件初始化時會watch該資料。
若store的資料不關聯子元件的模板,則為store的資料新增watch,在watch方法中修改關聯範本的物件。需要對關聯模板的物件初始化。

3. 同步或非同步傳遞資料

若父元件向子元件可能同步或非同步傳遞數據,則首先子元件需要在created或computed中對目標物件初始化,並且子元件中需要watch由props傳遞的數據,並修改目標物件。

#

以上是vue父子元件同步傳遞和非同步傳遞的介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除