vue3中父组件传给子组件一个对象,子组件如何修改父组件传过来的对象的值
时间: 2023-06-23 20:45:15 浏览: 82
在Vue3中,可以通过`props`属性将父组件的数据传递给子组件。如果父组件传递的是一个对象,子组件可以修改对象的属性值,但是不能直接修改对象本身。如果需要修改对象本身,可以通过$emit方法向父组件发送事件,让父组件来修改。
下面是一个示例代码:
```vue
<!-- ParentComponent.vue -->
<template>
<div>
<ChildComponent :myObj="myObj" @update-my-obj="updateMyObj" />
<p>My object: {{ myObj }}</p>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ChildComponent
},
data() {
return {
myObj: {
name: 'John',
age: 30
}
}
},
methods: {
updateMyObj(newObj) {
this.myObj = newObj
}
}
}
</script>
```
```vue
<!-- ChildComponent.vue -->
<template>
<div>
<p>Name: {{ myObj.name }}</p>
<p>Age: {{ myObj.age }}</p>
<button @click="updateObj">Update Object</button>
</div>
</template>
<script>
export default {
props: {
myObj: Object
},
methods: {
updateObj() {
// 修改对象的属性值
this.myObj.name = 'Jack'
this.myObj.age = 40
// 向父组件发送事件,修改对象本身
this.$emit('update-my-obj', {
name: 'Jack',
age: 40
})
}
}
}
</script>
```
在上面的代码中,父组件`ParentComponent`通过`:myObj`属性将对象`myObj`传递给了子组件`ChildComponent`。子组件可以通过`props`属性接收到该对象,并在`updateObj`方法中修改了对象的属性值。同时,子组件也通过`$emit`方法向父组件发送了一个`update-my-obj`事件,传递了修改后的对象。父组件通过`@update-my-obj`监听该事件,并在`updateMyObj`方法中修改了对象本身。
阅读全文