VaporComp.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <script setup vapor lang="ts">
  2. import { ref } from 'vue'
  3. import VdomComp from './VdomComp.vue'
  4. defineProps<{
  5. msg: string
  6. }>()
  7. const ok = ref(true)
  8. const passSlot = ref(true)
  9. const slotProp = ref('slot prop')
  10. </script>
  11. <template>
  12. <div class="vapor" style="border: 2px solid red; padding: 10px">
  13. <h2>This is a Vapor component in VDOM</h2>
  14. <p class="vapor-prop">props.msg: {{ msg }}</p>
  15. <button @click="ok = !ok">Toggle slots</button>
  16. <div v-if="ok" style="border: 2px solid orange; padding: 10px">
  17. <h3>vdom slots in vapor component</h3>
  18. <button
  19. class="change-vdom-slot-in-vapor-prop"
  20. @click="slotProp = 'changed'"
  21. >
  22. change slot prop
  23. </button>
  24. <div class="vdom-slot-in-vapor-default">
  25. #default:
  26. <slot :foo="slotProp" />
  27. </div>
  28. <div class="vdom-slot-in-vapor-test">
  29. #test: <slot name="test">fallback content</slot>
  30. </div>
  31. </div>
  32. <button
  33. class="toggle-vapor-slot-in-vdom-default"
  34. @click="passSlot = !passSlot"
  35. >
  36. Toggle default slot to vdom
  37. </button>
  38. <VdomComp :msg="msg" class="foo">
  39. <template #default="{ foo }" v-if="passSlot">
  40. <div>slot prop: {{ foo }}</div>
  41. <div>component prop: {{ msg }}</div>
  42. </template>
  43. </VdomComp>
  44. </div>
  45. </template>