下面是一个使用Vue 3编写的父子组件示例,包括传递数据和调用父组件方法:
ChildComponent.vue:
html
<template>
<div>
<p>Child Component</p>
<p>Message: {{ message }}</p>
<button @click="updateMessage">Update Message</button>
</div>
</template>
<script>
import { defineEmits, defineProps } from 'vue';
export default {
props: {
initialMessage: {
type: String,
required: true
}
},
emits: ['update:message'],
setup(props, { emit }) {
const message = defineProps({
message: props.initialMessage
});
function updateMessage() {
message.message = 'Hello Vue 3';
emit('update:message', message.message);
}
return {
message,
updateMessage
};
}
}
</script>
在上面的代码中,我们定义了一个名为ChildComponent
的子组件,并声明了一个名为initialMessage
的props属性,它的类型为字符串,并且是必需的。我们还定义了一个名为update:message
的自定义事件,用于将更新后的消息传递回父组件。
在setup()
函数中,我们使用defineProps()
函数来创建一个响应式的message
对象,并将其初始值设置为props.initialMessage
。然后,我们定义了一个名为updateMessage()
的方法,在点击按钮时将message.message
更新为'Hello Vue 3'
,并通过调用emit()
函数来触发update:message
事件并将更新后的消息传递给父组件。
ParentComponent.vue:
html
<template>
<div>
<p>Parent Component</p>
<child-component :initial-message="message" @update:message="onUpdateMessage"></child-component>
<p>Updated Message: {{ updatedMessage }}</p>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
import { ref } from 'vue';
export default {
components: {
ChildComponent
},
setup() {
const message = ref('Hello World');
const updatedMessage = ref('');
function onUpdateMessage(value) {
updatedMessage.value = value;
}
return {
message,
updatedMessage,
onUpdateMessage
};
}
}
</script>
在上面的代码中,我们定义了一个名为ParentComponent
的父组件,并在模板中使用了<child-component>
标签来引入子组件。我们将message
属性绑定到子组件的initial-message
属性上,并监听子组件触发的update:message
事件来获取更新后的消息。
在setup()
函数中,我们使用ref()
函数创建了两个响应式变量:message
和updatedMessage
。我们还定义了一个名为onUpdateMessage()
的方法,在子组件触发update:message
事件时被调用,用于将更新后的消息保存到updatedMessage
变量中。
这就是一个完整的父子组件示例,包括传递数据和调用父组件方法。