App.vue 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <script setup lang="ts">
  2. import { ref, shallowRef } from 'vue'
  3. import VaporComp from './components/VaporComp.vue'
  4. import VaporCompA from '../transition/components/VaporCompA.vue'
  5. import VdomComp from '../transition/components/VdomComp.vue'
  6. import VaporSlot from '../transition/components/VaporSlot.vue'
  7. import VdomTransitionGroup from './components/VdomTransitionGroup.vue'
  8. const msg = ref('hello')
  9. const passSlot = ref(true)
  10. const toggleVapor = ref(true)
  11. const interopComponent = shallowRef(VdomComp)
  12. function toggleInteropComponent() {
  13. interopComponent.value =
  14. interopComponent.value === VaporCompA ? VdomComp : VaporCompA
  15. }
  16. const items = ref(['a', 'b', 'c'])
  17. const enterClick = () => items.value.push('d', 'e')
  18. </script>
  19. <template>
  20. <input v-model="msg" />
  21. <button class="toggle-vdom-slot-in-vapor" @click="passSlot = !passSlot">
  22. toggle #test slot
  23. </button>
  24. <VaporComp :msg="msg">
  25. <template #default="{ foo }">
  26. <div>slot prop: {{ foo }}</div>
  27. <div>component prop: {{ msg }}</div>
  28. </template>
  29. <template #test v-if="passSlot">A test slot</template>
  30. </VaporComp>
  31. <!-- transition interop -->
  32. <div>
  33. <div class="trans-vapor">
  34. <button @click="toggleVapor = !toggleVapor">
  35. toggle vapor component
  36. </button>
  37. <div>
  38. <Transition>
  39. <VaporCompA v-if="toggleVapor" />
  40. </Transition>
  41. </div>
  42. </div>
  43. <div class="trans-vdom-vapor-out-in">
  44. <button @click="toggleInteropComponent">
  45. switch between vdom/vapor component out-in mode
  46. </button>
  47. <div>
  48. <Transition name="fade" mode="out-in">
  49. <component :is="interopComponent"></component>
  50. </Transition>
  51. </div>
  52. </div>
  53. </div>
  54. <!-- transition-group interop -->
  55. <div>
  56. <div class="trans-group-vapor">
  57. <button @click="enterClick">insert items</button>
  58. <div>
  59. <transition-group name="test">
  60. <VaporSlot v-for="item in items" :key="item">
  61. <div>{{ item }}</div>
  62. </VaporSlot>
  63. </transition-group>
  64. </div>
  65. </div>
  66. <VdomTransitionGroup />
  67. </div>
  68. </template>