可以通过使用 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 的响应式系统会自动更新视图等地方的数据,以反映数据的更改。