vue子組件改變父組件的值


   

1、父組件傳值給子組件,首先在父組件聲明值。

 

 

2、引用子組件的時候將值用屬性的方式傳遞給子組件。

 

 

3、子組件用props接收來自父組件的值 。 

 

4、子組件可以直接使用接收到的值。

 

 

5、如果子組件要修改來自父組件的值,不能直接修改,要通過事件進行修改

    首先子組件中點擊事件綁定方法,

   

 

    方法調用$emit()事件,通過這個方法發送請求給父組件,

   

 

     同時這個方法有兩個參數,第一個是方法名(此方法名在父組件中用到)。第二個是父組件中方法的參數。

    父組件綁定方法接收這個請求。(綁定的方法要和子組件傳來的方法一樣,即父組件中@后面的方法要個子組件中$emit()中的第一個參數一樣)

   

 

    同時在methods中定義這個方法,方法體中做數據處理。

   

 

6、因為vue是雙向數據綁定,因此數據更新的時候頁面上也會即時進行更新

7、本文中給出案例是每點擊一次按鈕數字+1,按鈕在子組件中,數字初始化在父組件中,數字在父子組件中都有展示

 

 代碼如下

父組件代碼

<template>
  <div style="border: 1px solid black;padding: 5px">
    <h1>this is component1</h1>
    <h2>我是父組件的data:我現在在父組件里面{{data}}</h2>

    <!--通過屬性傳遞給子組件-->
    <!--通過方法改變改變值-->
    <component2
      :data="data"
      @changeComponent1Data="component1DataChange"
    >
    </component2>

  </div>
</template>

<script>
  import component2 from './component2'

  export default {
    name: "component1",
    components: {
      component2
    },
    data() {
      return {
        data: 0
      }
    },
    methods: {
      /**
       * 父組件處理子組件發送的數據更改
       * @param params
       */
      component1DataChange(params) {
        this.data += params;
      }
    }
  }
</script>

<style scoped>

</style>

 

 

子組件代碼

<template>
  <div style="border: 1px dashed red">
    <h1>this is component2</h1>

    <!--直接使用接受到的值-->
    <h2>我是子組件接收到的父組件的data:我現在在子組件里面{{data}}</h2>

    <!--綁定要求改變父組件值的事件-->
    <el-button
      type="primary"
      @click="changeData"
    >
      點我改變父組件的值
    </el-button>

  </div>
</template>
<script>
  export default {
    name: "component2",
    components: {},
    props: {
      //接收父組件傳來的值
      data: Number
    },
    data() {
      return {}
    },
    methods: {
      /**
       * 通過方法請求給父組件改變值
       */
      changeData() {
        this.$emit("changeComponent1Data", 1)
      }
    }
  }
</script>

<style scoped>

</style>

 

效果圖如下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM