VaporComp.vue 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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: <slot :foo="slotProp" />
  26. </div>
  27. <div class="vdom-slot-in-vapor-test">
  28. #test: <slot name="test">fallback content</slot>
  29. </div>
  30. </div>
  31. <button
  32. class="toggle-vapor-slot-in-vdom-default"
  33. @click="passSlot = !passSlot"
  34. >
  35. Toggle default slot to vdom
  36. </button>
  37. <VdomComp :msg="msg">
  38. <template #default="{ foo }" v-if="passSlot">
  39. <div>slot prop: {{ foo }}</div>
  40. <div>component prop: {{ msg }}</div>
  41. </template>
  42. </VdomComp>
  43. </div>
  44. </template>