swiper/vue 获取 swiper实例方法

在Vue3中使用swiper/vue,如何获取swiper的组件实例?

在项目中使用到 swiper/vue,想调用slideTo方法,发现通过refs的方法,拿不到swiper实例。

<template>
    <swiper
        ref="swiperRef"
        class="promotion-activity-swiper"
        :modules="modules"
        :space-between="5"
        :initialSlide="2"
        slides-per-view="auto"
        :free-mode="true"
        :pagination="{ clickable: true }"
    >
        <swiper-slide>
        </swiper-slide>
    </swiper>
</template>
<script setup>
	 import { reactive, onMounted, watch, ref } from 'vue';
	 import { Swiper, SwiperSlide } from 'swiper/vue'
	 import { FreeMode } from 'swiper/modules'
    import 'swiper/css'
    import 'swiper/css/free-mode'
	const swiperRef = ref(null)
	onMounted(()=> {
     	 console.log(swiperRef.value)
     	 swiperRef.value.slideTo(3)
     })
</script>

通常我们想获取VUE实例,会如上面实例,swiperRef = ref(null),再调用swiperRef.value就能拿到实例,但是这样调用不了 swiperRef.value.slideTo() 方法,会报错slideTo方法不存在。
在网上搜了一下如何调用swiper实例,大部分都是通过 swiperRef = new Swiper(‘.swiper’, options) 这种方法初始化swiper,然后直接能用 swiperRef 实例。这种方法需要自己定义一个div通过类名去初始化,与我直接调用 Swiper 组件不一样。

解决方法:

查看了swiper官方文档,这里在VUE中使用swiper有给出获取实例的方法,

<template>
		<swiper
        	@swiper="setSwiper"
	        class="promotion-activity-swiper"
	        :modules="modules"
	        :space-between="5"
	        :initialSlide="2"
	        slides-per-view="auto"
	        :free-mode="true"
	        :pagination="{ clickable: true }"
	    >
	        <swiper-slide>
	        </swiper-slide>
	    </swiper>
</template>
<script setup>
	 import { reactive, onMounted, watch, ref } from 'vue';
	 import { Swiper, SwiperSlide } from 'swiper/vue'
	 import { FreeMode } from 'swiper/modules'
    import 'swiper/css'
    import 'swiper/css/free-mode'
	const swiperRef = ref(null)
	
	// 将swiper实例赋值给swiperRef 
	const setSwiper = (swiper)=> {
	        swiperRef.value = swiper
    }
   
	onMounted(()=> {
     	 swiperRef.value.slideTo(3)
     })
</script>

重点在于 @swiper=“setSwiper”, 参数就是swiper实例,setSwiper方法在mounted之前就会执行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 根据引用\[1\],报错信息显示在`./src/components/Swiper.vue`文件中找不到依赖项`swiper`和`swiper/css/swiper.css`。根据引用\[2\],可以通过在文件中引入`vue-awesome-swiper`和相应的样式文件来解决这个问题。具体的引入方式如下所示: ```javascript import Vue from 'vue' import VueAwesomeSwiper from 'vue-awesome-swiper' // 引入样式(Swiper 6.x及以上版本) import 'swiper/swiper-bundle.css' // 引入样式(Swiper 5.x及以下版本) import 'swiper/css/swiper.css' Vue.use(VueAwesomeSwiper, /* { default options with global component } */) ``` 根据引用\[3\],还需要在组件中引入`Swiper`和相应的样式文件,并在`mounted`钩子函数中实例化`Swiper`对象。具体的代码如下所示: ```vue <template> <div class="swiper-container"> <div class="swiper-wrapper"> <slot></slot> </div> </div> </template> <script> import Swiper from 'swiper' import 'swiper/css/swiper.css' export default { mounted() { new Swiper(".swiper-container") } } </script> ``` 最后,将封装的`Swiper`组件引入到需要使用的页面中即可解决问题。 #### 引用[.reference_title] - *1* *2* [Vue中引入swiper报错--已解决](https://blog.csdn.net/darabiuz/article/details/120930860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [关于在VUE中封装一个Swiper组件方法-----详解](https://blog.csdn.net/weixin_46058357/article/details/104591118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值