Vue(Quasar)中如何按条件控制轮播(carousel)组件箭头显隐
Quasar 轮播按图片数控制箭头显示实现
不用写自定义箭头,q-carousel原生的arrows属性就支持传布尔值动态控制显示状态,改两个地方就行:
- 把轮播图数据抽成响应式数组,不用在模板里硬编码
q-carousel-slide - 把原来写死的
arrows属性改成动态绑定,仅当图片数量大于1时开启箭头,单图场景自动隐藏
所有原有功能(滑动、动画、全屏按钮、无限循环)都不需要调整,动态加载图片的场景下这个判断也会自动生效,不用额外加监听。
完整可运行代码
<template> <div class="q-pa-md"> <q-carousel swipeable animated :arrows="slideList.length > 1" v-model="slide" v-model:fullscreen="fullscreen" infinite > <q-carousel-slide v-for="item in slideList" :key="item.name" :name="item.name" :img-src="item.imgSrc" /> <template v-slot:control> <q-carousel-control position="bottom-right" :offset="[18, 18]" > <q-btn push round dense color="white" text-color="primary" :icon="fullscreen ? 'fullscreen_exit' : 'fullscreen'" @click="fullscreen = !fullscreen" /> </q-carousel-control> </template> </q-carousel> </div> </template> <script> import { ref } from 'vue' export default { setup () { // 轮播图数据,接口拉取的场景直接替换这个数组值即可,箭头显示逻辑会自动同步 const slideList = ref([ { name: 1, imgSrc: 'https://cdn.quasar.dev/img/mountains.jpg' }, { name: 2, imgSrc: 'https://cdn.quasar.dev/img/parallax1.jpg' }, { name: 3, imgSrc: 'https://cdn.quasar.dev/img/parallax2.jpg' }, { name: 4, imgSrc: 'https://cdn.quasar.dev/img/quasar.jpg' } ]) return { slideList, slide: ref(1), fullscreen: ref(false) } } } </script>
额外提示:如果需要单图时同时隐藏底部分页指示器,给组件加一行
:navigation="slideList.length > 1"就行,逻辑和箭头控制完全一致。
内容的提问来源于stack exchange,提问作者Courtesy
相关产品推荐
相关产品推荐

