You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用v-slide-group时页面首次加载两侧箭头不显示,调整窗口大小后才出现如何解决

问题根因

这是Vuetify v-slide-group 组件的常见初始化时机问题:组件内部是否展示切换箭头的逻辑,依赖渲染完成后对容器宽度、子元素总宽度的差值计算。你当前用 v-if 控制组件渲染,当异步请求完成、v-if 条件命中后组件才挂载,但组件内部的宽度计算逻辑没有被主动触发,只有窗口resize事件会触发该计算逻辑,因此只有调整窗口后箭头才会正常显示。

可行解决方案

方案1:手动触发组件resize方法(最推荐)

给v-slide-group添加ref标识,在列表数据加载完成后,等待DOM更新完毕主动调用组件内置的resize方法触发计算:

<!-- 给组件添加ref -->
<v-slide-group
  ref="slideGroup"
  v-if="!loading && myEducationsFiltered.length>0 && listType !== 'requested'"
  v-model="modelMyEdu"
  active-class="success"
  class="pa-4"
  show-arrows
>
  <v-slide-item
    v-for="(item,index) in myEducationsFiltered.slice(0, 7)"
    :key="index"
  >
    <course.........>
  </v-slide-item>
</v-slide-group>

在获取myEducationsFiltered的异步逻辑末尾添加调用:

// Vue2写法
// 数据赋值完成后
this.$nextTick(() => {
  this.$refs.slideGroup?.resize()
})
// Vue3写法
import { nextTick } from 'vue'
const slideGroup = ref(null)

// 数据赋值后
await nextTick()
slideGroup.value?.resize()

方案2:绑定动态key触发组件重渲染

给v-slide-group绑定和列表数据关联的key,数据更新后组件会重新挂载,自动触发内部计算:

<v-slide-group
  :key="myEducationsFiltered.length"
  v-if="!loading && myEducationsFiltered.length>0 && listType !== 'requested'"
  v-model="modelMyEdu"
  active-class="success"
  class="pa-4"
  show-arrows
>
<!-- 省略子元素代码 -->
</v-slide-group>

方案3:CSS强制控制箭头显示(不推荐,仅应急用)

如果不想改动业务逻辑,可通过CSS强制控制箭头的显示逻辑,避免依赖组件内部计算:

/* 显示箭头 */
.v-slide-group__prev, .v-slide-group__next {
  display: flex !important;
}
/* 禁用状态下隐藏箭头 */
.v-slide-group__prev--disabled, .v-slide-group__next--disabled {
  display: none !important;
}

内容的提问来源于stack exchange,提问作者nsnclk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:06:03