当前位置: 首页 > article >正文

记一次Vue3中使用vue-awesome-swiper遇到的坑

目录

  • 记一次Vue3中使用vue-awesome-swiper遇到的坑
    • 问题现象

记一次Vue3中使用vue-awesome-swiper遇到的坑

在最近的Vue2组件切换到Vue3时,发现了 vue-awesome-swiper版本V5.0.1 的一处坑。记录一下,希望对大家有所帮助。

问题现象

<template>
	...
	<swiper
	  class="swiper"
	  :activeIndex="state.activePosterIndex"
	  :options="state.swiperOptions"
	  @slide-change="handlePosterChange"
	  ref="mySwiperRef"
	>
	  <swiper-slide v-for="(item, index) in state.detailItemCodesList" :key="index">
	    <div class="swiper-item">
	      <a-image style="width: 300px; height: 300px" :src="item.previewUrl" />
	    </div>
	  </swiper-slide>
	</swiper>
	<div
	 v-for="(item, index) in state.detailItemCodesList"
	  :key="index"
	  :class="['poster', state.activePosterIndex === index ? 'active' : '']"
	  @click="handlePosterClick(index)"
	>
	  <img style="width: 120px; height: 120px" fit="fill" :src="item.previewUrl" />
	  <div class="poster-code">{{ item.itemCode }}</div>
	</div>
	...
</template>
<script setup lang="ts">
  	import { Swiper, SwiperSlide } from 'vue-awesome-swiper'
	import type { Swiper as SwiperClass } from 'swiper/types'
	const mySwiperRef = ref<SwiperClass>()
	// 监听封面图点击
	const handlePosterClick = (index) => {
	  state.activePosterIndex = index
	  console.log('mySwiperRef.value---', mySwiperRef.value)
	  mySwiperRef.value.slideTo(state.activePosterIndex, 500, false)
	}
</script>

主要逻辑是这样的:

  1. 顶部一个Swiper组件,下面一个缩略图;
  2. 滑动Swiper切换缩略图的选中状态;
  3. 选中不同缩略图切换到对应Swiper下标。

但是在点击缩略图切换Swiper下标时一直提示slideTo未定义 ,打印mySwiperRef.value也确实发现里面没有slideTo方法。后来查看文档(https://swiperjs.com/swiper-api)确实是有此方法,再多次搜索相关文章,终于在别人的示例代码中查到了蛛丝马迹:在标签上不需要使用refmySwiperRef.value的赋值需要在swiper回调中,更改后的代码如下:

<template>
	...
	<swiper
	  class="swiper"
	  :activeIndex="state.activePosterIndex"
	  :options="state.swiperOptions"
	  @slide-change="handlePosterChange"
-	  ref="mySwiperRef"
+	  @swiper="onSwiper"
	>
	  <swiper-slide v-for="(item, index) in state.detailItemCodesList" :key="index">
	    <div class="swiper-item">
	      <a-image style="width: 300px; height: 300px" :src="item.previewUrl" />
	    </div>
	  </swiper-slide>
	</swiper>
	<div
	 v-for="(item, index) in state.detailItemCodesList"
	  :key="index"
	  :class="['poster', state.activePosterIndex === index ? 'active' : '']"
	  @click="handlePosterClick(index)"
	>
	  <img style="width: 120px; height: 120px" fit="fill" :src="item.previewUrl" />
	  <div class="poster-code">{{ item.itemCode }}</div>
	</div>
	...
</template>
<script setup lang="ts">
  	import { Swiper, SwiperSlide } from 'vue-awesome-swiper'
	import type { Swiper as SwiperClass } from 'swiper/types'
	const mySwiperRef = ref<SwiperClass>()
+	const onSwiper = (swiper: SwiperClass) => {
+	  mySwiperRef.value = swiper
+	  console.log('mySwiperRef.value---', mySwiperRef.value)
+	}
	// 监听封面图点击
	const handlePosterClick = (index) => {
	  state.activePosterIndex = index
	  console.log('mySwiperRef.value---', mySwiperRef.value)
	  mySwiperRef.value.slideTo(state.activePosterIndex, 500, false)
	}
</script>

http://www.kler.cn/a/453064.html

相关文章:

  • FPGA的DMA应用——pcileech
  • 深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
  • Docker服务发现新纪元:探索Consul的无限魅力
  • Java:188 基于springboot妇幼健康管理系统
  • [Python机器学习]:Anaconda3实践环境安装和使用
  • 傅里叶变换原理
  • vscode写python,遇到问题:ModuleNotFoundError: No module named ‘pillow‘(已解决 避坑)
  • 前端案例---自定义鼠标右键菜单
  • HTML 新手易犯的标签属性设置错误
  • sentinel学习笔记6-限流降级(上)
  • 创建线程的四种方式
  • 大数据技术原理与应用期末复习-代码
  • 深度学习camp-第J5周:DenseNet+SE-Net实战
  • 定位方式:css
  • 选择排序 冒泡排序 MySQL 架构
  • [python SQLAlchemy数据库操作入门]-08.ORM删除不再需要的股票记录
  • C项目 天天酷跑(下篇)
  • ZCC5090EA适用于TYPE-C接口,集成30V OVP功能, 最大1.5A充电电流,带NTC及使能功能,双节锂电升压充电芯片替代CS5090EA
  • 开源智能工业软件技术发展分析
  • “黄师日报”平安小程序springboot+论文源码调试讲解
  • Spring的注解@Autowired 是什么意思?
  • 【每日学点鸿蒙知识】长时任务、profiler allocation、事件订阅、getTagInfo、NativeWindow
  • 重温设计模式--状态模式
  • 基于Spring Boot的中国戏曲文化传播系统
  • Android 中的生产者-消费者模式实现
  • kubeadm 安装最新 k8s 集群