vue3中父子组件通信
时间: 2023-12-08 13:39:09 浏览: 146
在Vue3中,父子组件通信有以下三种方式:
1. 父组件给子组件传参:
父组件中通过props向子组件传递数据,子组件中通过props接收数据。
2. 子组件调用父组件的方法:
父组件中通过v-on绑定一个方法,子组件中通过$emit触发这个方法,并传递数据。
3. 子组件暴露属性给父组件:
子组件中通过defineExpose暴露属性或方法,父组件中通过ref获取子组件实例,再调用子组件的属性或方法。
以下是三种方式的代码示例:
1. 父组件给子组件传参:
父组件中:
```vue
<template>
<child-component :message="msg"></child-component>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent,
},
data() {
return {
msg: 'Hello World',
};
},
};
</script>
```
子组件中:
```vue
<template>
<div>{{ message }}</div>
</template>
<script>
export default {
props: {
message: String,
},};
</script>
```
2. 子组件调用父组件的方法:
父组件中:
```vue
<template>
<child-component @change-visible="handleChangeVisible"></child-component>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent,
},
methods: {
handleChangeVisible(visible) {
console.log(visible);
},
},
};
</script>
```
子组件中:
```vue
<template>
<button @click="handleClick">Change Visible</button>
</template>
<script>
export default {
methods: {
handleClick() {
this.$emit('change-visible', false);
},
},
};
</script>
```
3. 子组件暴露属性给父组件:
子组件中:
```vue
<template>
<div>{{ message }}</div>
</template>
<script>
import { defineExpose } from 'vue';
export default {
setup() {
const message = 'Hello World';
defineExpose({
message,
});
return {
message,
};
},
};
</script>
```
父组件中:
```vue
<template>
<child-component ref="child"></child-component>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent,
},
mounted() {
console.log(this.$refs.child.message);
},
};
</script>
```
阅读全文