App.vue 2.0 KB

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