Skip to content

Slots And Vnode Field

如果您想支持 template 模式下渲染插槽,以及 props 中传入的某个字段,只需要定义插槽后传入默认内容。

vue
<script setup>
import { useOverlayDefine } from '@overlastic/vue'
defineProps({ title: String })

const { visible, /* ... */ } = useOverlayDefine()
</script>

<template>
  <div v-if="visible">
    <slot name="title">
      <!-- 传入默认内容 -->
      {{ title }}
    </slot>
  </div>
</template>

如果您想在回调(命令式)下,支持某个字段渲染 VNode,建议您使用内置组件 Field

Field 会帮您处理 VNode、Component、String 的渲染,它可以在回调和 template 下同时使用。

以下是同时支持 Slots、String、VNode、Component 的完整例子:

vue
<script lang="ts" setup>
import { Component, VNode } from 'vue'
import { Field, useOverlayDefine } from '@overlastic/vue'
defineProps<{
  title?: string | VNode | Component
}>()

const { visible, /* ... */ } = useOverlayDefine()
</script>

<template>
  <div v-if="visible">
    <slot name="title">
      <!-- 传入字符串、虚拟节点或组件 -->
      <Field :is="title" />
    </slot>
  </div>
</template>
ts
const result = await renderOverlay(Component, {
  title: h('div', 'You Content')
})

MIT Licensed