@@ -114,7 +114,7 @@ export interface CarouselEmits {
114114 </script >
115115
116116<script setup lang="ts" generic =" T extends CarouselItem " >
117- import { computed , ref , watch , onMounted } from ' vue'
117+ import { computed , ref , watch , onMounted , onBeforeUnmount } from ' vue'
118118import useEmblaCarousel from ' embla-carousel-vue'
119119import { Primitive , useForwardProps } from ' reka-ui'
120120import { reactivePick } from ' @vueuse/core'
@@ -212,13 +212,16 @@ async function loadPlugins() {
212212 plugins .value = emblaPlugins
213213}
214214
215- watch (() => [props .autoplay , props .autoScroll , props .autoHeight , props .classNames , props .fade , props .wheelGestures ], loadPlugins , { immediate: true })
215+ watch (() => [props .autoplay , props .autoScroll , props .autoHeight , props .classNames , props .fade , props .wheelGestures ], async () => {
216+ await loadPlugins ()
217+ emblaApi .value ?.reInit (options .value , plugins .value )
218+ }, { immediate: true })
216219
217- const [emblaRef, emblaApi] = useEmblaCarousel (options . value , plugins . value )
220+ const [emblaRef, emblaApi] = useEmblaCarousel (options , plugins )
218221
219- watch ([ options , plugins ] , () => {
222+ watch (options , () => {
220223 emblaApi .value ?.reInit (options .value , plugins .value )
221- })
224+ }, { flush: ' post ' } )
222225
223226function scrollPrev() {
224227 emblaApi .value ?.scrollPrev ()
@@ -280,11 +283,23 @@ onMounted(() => {
280283 return
281284 }
282285
283- emblaApi .value ?.on (' init' , onInit )
284- emblaApi .value ?.on (' init' , onSelect )
285- emblaApi .value ?.on (' reInit' , onInit )
286- emblaApi .value ?.on (' reInit' , onSelect )
287- emblaApi .value ?.on (' select' , onSelect )
286+ emblaApi .value .on (' init' , onInit )
287+ emblaApi .value .on (' init' , onSelect )
288+ emblaApi .value .on (' reInit' , onInit )
289+ emblaApi .value .on (' reInit' , onSelect )
290+ emblaApi .value .on (' select' , onSelect )
291+ })
292+
293+ onBeforeUnmount (() => {
294+ if (! emblaApi .value ) {
295+ return
296+ }
297+
298+ emblaApi .value .off (' init' , onInit )
299+ emblaApi .value .off (' init' , onSelect )
300+ emblaApi .value .off (' reInit' , onInit )
301+ emblaApi .value .off (' reInit' , onSelect )
302+ emblaApi .value .off (' select' , onSelect )
288303})
289304
290305defineExpose ({
0 commit comments