How to call a child method from a parent component in Vue 3 with <script setup>
dinsdag 12 december 2023 - 188 woorden, 1 min read
Short explanation how to call a function in a child component from the parent component in Vue3.
With defineExpose()
within your component you will expose the functions (or other component properties) to the parent components.
In this simple example I used an HTML dialog element with the native .showModal()
and .close()
methods wrapped in a show and close function.
childComponent.vue:
<script setup>
// The Dialog element in a Vue ref.
const dialog = ref(document.getElementById('dialog'))
// This function can be called from the parent component.
const show = () => {
dialog.value.showModal()
}
// This function can be called from the parent component.
const close = () => {
dialog.value.close()
}
// We expose the function which can be called from the parent component.
defineExpose({
show,
close
})
</script>
<template>
<dialog ref="dialog">
<form method="dialog">
<button @click="close">Close</button>
<button type="submit">Submit</button>
</form>
</dialog>
</template>
parentComponent.vue:
<script setup>
// Attach the component to a Vue ref.
const modalRef = ref()
const openModal = () => {
// Through the ref we can call the show function within the childComponent.
modalRef.show()
}
</script>
<template>
<button @click="openModal">Open modal</button>
<childComponent ref="modalRef"></childComponent>
</template>
Looking for the opposite?
How to call a parent method from a child component.
Resources