SoFunction
Updated on 2025-04-05

Summary of the method of implementing two-way binding of parent-child components by vue

" is a popular JavaScript framework that provides a simple and efficient way to build a user interface. In Vue, two-way binding between parent-child components is a common requirement and can be implemented in the following ways.

1. Usepropsand$emitParent component passespropsPass data to subcomponents, and subcomponents pass$emitTriggers a custom event to notify changes in parent component data. This method can achieve the two-way binding effect between parent and child components. The sample code is as follows:

Parent component:

<template>
  <div>
    <input v-model=\"message\" />
    <child-component :message=\"message\" @update-message=\"message = $event\" />
  </div>
</template>

<script>
import ChildComponent from './';

export default {
  data() {
    return {
      message: ''
    };
  },
  components: {
    ChildComponent
  }
};
</script>

Subcomponents:

<template>
  <div>
    <input v-model=\"localMessage\" @input=\"$emit('update-message', localMessage)\" />
  </div>
</template>

<script>
export default {
  props: ['message'],
  data() {
    return {
      localMessage: 
    };
  },
  watch: {
    message(newValue) {
       = newValue;
    }
  }
};
</script>

2. Usev-modelandsyncModifier Vue providesv-modelDirectives can implement bidirectional data binding between parent and child components. But by default,v-modelOnly data will be passed to the child component, and changes in the child component will not be fed back to the parent component. To achieve two-way binding, you can usesyncModifier. The sample code is as follows:

Parent component:

<template>
  <div>
    <input v-model=\"message\" />
    <child-component :=\"message\" />
  </div>
</template>

<script>
import ChildComponent from './';

export default {
  data() {
    return {
      message: ''
    };
  },
  components: {
    ChildComponent
  }
};
</script>

Subcomponents:

<template>
  <div>
    <input v-model=\"localMessage\" />
  </div>
</template>

<script>
export default {
  props: ['message'],
  data() {
    return {
      localMessage: 
    };
  },
  watch: {
    localMessage(newValue) {
      this.$emit('update:message', newValue);
    }
  }
};
</script>

The above are two common methods to implement bidirectional binding of parent-child components. Through these methods, two-way transmission and synchronization of data can be achieved between parent and child components, thereby achieving more flexible and efficient component communication. "

This is the article about the summary of the method of implementing two-way binding of parent-child components in vue. This is the end. For more related content on bi-way binding of vue parent-child components, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!