vue.js父子組件傳參的原理與實現方法 原創

在Vue中,父子組件之間的數據傳遞常常會使用props進行實現。具體原理是,當一個父組件嵌套瞭一個子組件時,在子組件內部使用props接收從父組件傳遞過來的數據,這些數據可以是基礎類型如字符串、數字等,也可以是對象或者數組等復雜類型。

下面展示一個例子,通過一個簡單的計數器組件Counter.vue,演示如何在父組件App.vue中傳值到子組件Counter.vue並更新計數器操作:

子組件:

<!-- Counter.vue -->
<template>
  <div class="counter">
    <h4>{{ title }}</h4>
    <p>當前計數:{{ count }}</p>
    <button @click="addCount">+1</button>
    <button @click="reduceCount">-1</button>
  </div>
</template>

<script>
export default {
  name: "Counter",
  props: {
    title: {
      type: String,
      required: true,
    },
    count: {
      type: Number,
      required: true,
    },
  },
  methods: {
    // 添加計數
    addCount() {
      this.$emit("add-count");
    },
    // 減少計數
    reduceCount() {
      this.$emit("reduce-count");
    },
  },
};
</script>

父組件:

<!-- App.vue -->
<template>
  <div class="container">
    <h2>計數器應用</h2>
    <hr />
    <!-- 父組件傳遞計數器標題和當前計數給子組件 -->
    <Counter :title="title" :count="count" @add-count="handleAddCount" @reduce-count="handleReduceCount" />
  </div>
</template>

<script>
import Counter from "./components/Counter.vue";

export default {
  name: "App",
  components: {
    Counter,
  },
  data() {
    return {
      title: "計數器",
      count: 0,
    };
  },
  methods: {
    // 添加計數
    handleAddCount() {
      this.count++;
    },
    // 減少計數
    handleReduceCount() {
      this.count--;
    },
  },
};
</script>

在上述示例中,傳遞數據的方式是通過在父組件中使用v-bind指令將數據綁定到子組件的props屬性上,並在子組件內部訪問props接收數據。同時,在子組件內部定義瞭兩個方法addCount和reduceCount,用於觸發自定義事件,從而向父組件emit事件。

最後需要註意的是,父子組件之間的數據流是單向的,即數據隻能從父組件流向子組件,不能反過來。如果子組件想要修改數據,必須通過emit事件來通知父組件進行相應的操作。

推薦閱讀: