docs(modal): provide an example to bind event listeners (#1611)

This commit is contained in:
Neil Richter
2024-04-10 17:15:39 +02:00
committed by GitHub
parent 07a4d13c0f
commit d19d7077e4
4 changed files with 34 additions and 4 deletions

View File

@@ -1,6 +1,7 @@
<template>
<div class="[&>div>pre]:!rounded-t-none [&>div>pre]:!mt-0">
<div
v-if="hasPreview"
class="flex border border-gray-200 dark:border-gray-700 relative rounded-t-md"
:class="[{ 'p-4': padding, 'rounded-b-md': !hasCode, 'border-b-0': hasCode, 'not-prose': !prose }, backgroundClass, extraClass]"
>
@@ -37,6 +38,10 @@ const props = defineProps({
type: Object,
default: () => ({})
},
hiddenPreview: {
type: Boolean,
default: false
},
hiddenCode: {
type: Boolean,
default: false
@@ -79,6 +84,7 @@ const data = await fetchContentExampleCode(camelName)
const highlighter = useShikiHighlighter()
const hasCode = computed(() => !props.hiddenCode && (data?.code || instance.slots.code))
const hasPreview = computed(() => !props.hiddenPreview && (props.component || instance.slots.default))
const { data: ast } = await useAsyncData(`content-example-${camelName}-ast`, () => transformContent('content:_markdown.md', `\`\`\`vue\n${data?.code ?? ''}\n\`\`\``, {
markdown: {

View File

@@ -5,13 +5,24 @@ defineProps({
default: 0
}
})
const emit = defineEmits(['success'])
function onSuccess () {
emit('success')
}
</script>
<template>
<UModal>
<UCard>
<p>This modal was opened programmatically !</p>
<p>Count: {{ count }}</p>
<div class="space-y-2">
<p>This modal was opened programmatically !</p>
<p>Count: {{ count }}</p>
<UButton @click="onSuccess">
Click to emit a success event
</UButton>
</div>
</UCard>
</UModal>
</template>

View File

@@ -1,13 +1,20 @@
<script setup lang="ts">
import { ModalExampleComponent } from '#components'
const toast = useToast()
const modal = useModal()
const count = ref(0)
function openModal () {
count.value += 1
modal.open(ModalExampleComponent, {
count: count.value
count: count.value,
onSuccess () {
toast.add({
title: 'Success !',
id: 'modal-success'
})
}
})
}
</script>

View File

@@ -77,7 +77,13 @@ First of all, add the `Modals` component to your app, preferably inside `app.vue
Then, you can use the `useModal` composable to control your modals within your app.
:component-example{component="modal-example-composable"}
<!-- For prerendering -->
:component-example{component="modal-example-component" hiddenCode hiddenPreview }
::code-group{class="[&>div:last-child>div:first-child]:!rounded-t-none"}
:component-example{component="modal-example-composable" label="app.vue" }
:component-example{component="modal-example-component" hiddenPreview label="modal.vue" }
::
Additionally, you can close the modal within the modal component by calling `modal.close()`.