Vue通过触发自定义事件来通知子组件数据已经改变,并让子组件自己更新其内部的数据

60 阅读1分钟

可以通过使用 Vue 的 emit 方法触发一个自定义事件来通知子组件数据已经改变,并让子组件自己更新其内部的数据。下面是一个基本的示例:

父组件:

<template>
  <div>
    <child-component @updateData="updateData"></child-component>
    <button @click="updateData">更新数据</button>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  methods: {
    updateData() {
      this.$emit('updateData', '新的数据'); // 触发自定义事件并传递新的数据
    }
  }
}
</script>

子组件 (ChildComponent.vue):

<template>
  <div>
    <p>{{ data }}</p> // 这里将会显示新的数据
  </div>
</template>

<script>
export default {
  data() {
    return {
      data: '初始数据' // 初始时显示的静态数据,可以在这里设置新数据发生后的显示内容
    }
  },
  watch: {
    data(newVal, oldVal) { // 当 data 发生变化时触发这个函数,新的数据将会自动填充到这里
      console.log('数据已更新:', newVal); // 你可以在这里处理数据更新后的逻辑,例如更新视图等
    }
  },
  methods: {
    updateData(newData) { // 监听父组件触发的自定义事件,并更新内部的数据
      this.data = newData; // 将新的数据赋值给 data,Vue 的响应式系统会自动更新视图等地方的数据
    }
  }
}
</script>

在这个例子中,父组件通过触发一个名为 updateData 的自定义事件来通知子组件数据已经改变。子组件监听这个事件,并在事件触发时更新其内部的数据。Vue 的响应式系统会自动更新视图等地方的数据,以反映数据的更改。