Vue子組件與父組件之間的通信


1.環境搭建

  • 下載 vue-cli:npm install -g vue-cli
  • 初始化項目:vue init webpack vue-demo
  • 進入vue-demo文件夾:cd vue-demo
  • 下載安裝依賴:npm install
  • 運行該項目:npm run dev

2.父組件向子組件傳值

  • src/components/文件夾下建一個組件,Home.vue
  • 創建子組件,在src/components/文件夾下新建一個文件夾,在新建文件夾中新建一個組件Child.vue

在Child.vue中創建props,用於接收父組件傳遞的值

<template>
    <div>
        <div v-for="(item,key) of c" :key="key">
           {{key}}: {{item}}
        </div>
    </div>
</template>

<script>
export default {
    name: 'child',
    props: {
        c: Array
    }
}
</script>

<style  scoped>
    
</style>

在Home.vue中注冊Child組件,並在template的div標簽中添加home-child標簽,標簽中使用v-bind指令綁定c。子組件通過props就可以接受到這個父組件傳遞的值。

<template>
  <div class="hello">
    <home-child v-bind:c="c"></home-child>
  </div>
</template>

<script>
import HomeChild from '@/components/common/Child'
export default {
  name: 'home',
  components: {
    HomeChild
  },
  data () {
    return {
      c:[1,2,3]
    }
  }
}
</script>

<style scoped>

</style>

結果
12.png

3.子組件向父組件傳值

給按鈕綁定點擊事件ChildClick
在事件的函數中使用$emit來觸發一個自定義事件,並傳遞一個參數,這個參數就是子組件要傳遞給父組件的值。

<template>
    <div>
        <div v-for="(item,key) of c" :key="key">
           {{key}}: {{item}}
        </div>
        <button v-on:click="ChildClick">點擊向父組件傳值</button>
        <span>{{data}}</span>
    </div>
</template>

<script>
export default {
    name: 'child',
    props: {
        c: Array,
        data: String
    },
    methods: {
        ChildClick: function () {
            this.$emit("ListenChild","I am child.vue")
        }
    }
}
</script>

<style  scoped>

</style>

在父組件中的home-child標簽中監聽該自定義事件,並添加一個響應該事件的方法ShowChild。

<template>
  <div class="hello">
    <home-child v-bind:c="c" :data="data" v-on:ListenChild="ShowChild"></home-child>
  </div>
</template>

<script>
import HomeChild from '@/components/common/Child'
export default {
  name: 'Home',
  components: {
    HomeChild
  },
  data () {
    return {
      c:[1,2,3],
      data: " "
    }
  },
  methods: {
    ShowChild: function (data) {
      this.data = data
      console.log("data:" + data)
    }
  }
}
</script>

<style scoped>

</style>

結果:
13.png

點擊按鈕后:
14.png


免責聲明!

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



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