vue3实现抽屉组件中实现上一条和下一条

article/2025/9/18 7:13:52

简单的模拟在用户查看学员详情时,点击上一条和下一条实现数据切换。

实现逻辑:首先将点击的用户的下标传给抽屉组件,然后监听下标的变化,判断是否为最后一个用户,是就设置样式并禁用按钮。上一条和下一条按钮绑定点击事件来触发父组件的自定义事件修改下标值,然后会触发子组件渲染。如果是点击下一条调用接口,可以将列表的所有用户Id存入数组,传递给子组件,然后可以根据下标拿到当前的用户id,然后根据用户id调用详情接口。

//父组件<div><div class="sss" key="index" v-for="item, index in arr" @click="() => showModel(item, index)">{{ item.name }}</div>
</div>
<Dawer @changeIndex1="changeIndex" destroy-on-close=true :key="3" :arr="arr" v-model="isShow" :name="name":index1="index1" :ids="ids">
</Dawer>// js代码// 定义的假数据
const arr: Array<any> = [{ id: 1, name: '11' }, { id: 2, name: '22' }, { id: 3, name: '33'}]// 初始化
let name = ref('')
let index1 = ref(0)
const isShow = ref(false)// 列表点击事件
const showModel = (item: any, index: any) => {isShow.value = truename.value = item.nameindex1.value = index
}// 自定义事件
用于接收修改以后的值,并赋值
const changeIndex = (val: number) => {index1.value = val
}// 拿到所有的id  这里没用到,
const ids = arr.map(item => {return item.id
})
// 子组件<template><div class=''><el-drawer v-model="modelValue" @close="close" title="I am the title" :with-header="false"><div>{{ name1 }}</div><button @click="goPre" :class="{ preBtn: is }" :disabled="is">上一条</button><button @click="goNext" :class="{ preBtn: is1 }" :disabled="is1">下一条</button></el-drawer></div>
</template><script setup lang='ts'>
import { arrayBuffer } from 'stream/consumers';
import { isRef, nextTick, toRefs, watch, watchEffect } from 'vue';interface Type {id: Number
}
import { ref, reactive, onMounted } from 'vue'
const props = defineProps({modelValue: Boolean,name: String,index1: Number,ids: Array<number>,arr: Array<any>
})const name1 = ref(props.name)const emit = defineEmits(["update:modelValue", "changeIndex1"])
const is = ref(false)
const is1 = ref(false)watchEffect(() => {console.log('--------------', props.index1);is.value = falseis1.value = falseif (props.index1 <= 0) {is.value = true} else if (props.index1 >= props.ids.length - 1) {is1.value = true} else {is.value = is1.value = false}// 修改抽屉的值const curObj = props.arr.find((e, i) => {return i == props.index1})name1.value = curObj.name})
const close = () => {emit("update:modelValue", false)
}
const goPre = () => {emit("changeIndex1", props.index1 - 1)
}
const goNext = () => {emit("changeIndex1", props.index1 + 1)
}</script><style scope>
.preBtn {background-color: red;cursor: no-drop;}
</style>

为了是代码更加简单,采用provide和inject实现此功能。如下

父组件:

provide('mes', {name,index1,arr,ids,changeIndex
})<Dawer destroy-on-close=true :key="3" :arr="arr" v-model="isShow" >
</Dawer>直接通过子组件调用此方法修改数据。const changeIndex = (val: number) => {index1.value = val
}

子组件

const { name,index1,ids,arr,changeIndex } = inject('mes')// 以上属性是响应式的,使用的时候注意.valueconst { name,index1,ids,arr,changeIndex } = inject('mes')
console.log(name, index1);
const props = defineProps({modelValue: Boolean,// name: String,// index1: Number,// ids: Array<number>,// arr: Array<any>
})const emit = defineEmits(["update:modelValue"])
const is = ref(false)
const is1 = ref(false)// 立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行。
watchEffect(() => {console.log('--------------', index1);is.value = falseis1.value = falseif (index1.value <= 0) {is.value = true} else if (index1.value >= ids.length - 1) {is1.value = true} else {is.value = is1.value = false}// 修改抽屉的值const curObj = arr.find((e, i: Number) => {return i == index1.value})name.value = curObj?.nameconsole.log(curObj?.name);})
const close = () => {emit("update:modelValue", false)
}
const goPre = () => {// emit("changeIndex1", props.index1 - 1)console.log(index1);changeIndex(index1.value - 1)
}
const goNext = () => {// emit("changeIndex1", props.index1 + 1)changeIndex(index1.value + 1)}</script><style scope>
.preBtn {background-color: red;cursor: no-drop;}
</style>


http://chatgpt.dhexx.cn/article/Zgy0JfMt.shtml

相关文章

SQL 获取下一条数据

这里假设有一张员工表&#xff0c;有三个字段 &#xff08;ID&#xff0c;员工姓名&#xff0c;年龄&#xff09;&#xff1a; CREATE TABLE [dbo].[Employee] ( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [varchar](50) NOT NULL, [Age] [int] NOT NULL ) ON [PRIMARY] 这…

点击下一条

<view class"content"><view class"text-area"><button type"primary" click"next()">点击下一条</button></view><view class"title">{{title}}</view> </view><scrip…

关于MySqL数据库查询当前数据的上一条和下一条数据

如上图所示第14行数据的上一条和下一条&#xff0c;id都不是连续的&#xff0c;因此意图通过id-1或者id1是肯定行不通的&#xff0c;那么怎么办呢&#xff1f;其实也简单就是查询比id14小的元素中的最大值&#xff0c;比id14大的元素中的最小值。 select * from tb_user where…

Mysql取上一条,下一条

2019独角兽企业重金招聘Python工程师标准>>> 根据自增主键还获取。 上一条&#xff1a; SELECT * FROM tableName WHERE Nid<? ORDER by Nid desc 下一条&#xff1a; SELECT * FROM tableName WHERE Nid>? ORDER by Nid asc 使用PDO的可以只获取一条&#…

配置静态路由/下一跳知识

配置静态路由/下一跳地址 下一跳简单说法&#xff1a; *简单的来说&#xff0c;可以从字面理解&#xff0c;下一跳就是指路由器路由选择的下面一次跳跃*拓扑图 先给路由器和PC1,PC2进行配置IP地址 路由器1 路由器2 路由器3 然后在设置下一跳 命令如下&#xff1a; 目标…

软件测试周刊(第24期):最不重要的素质就是智商

这里记录过去一周我们看到的软件测试及周边的行业动态&#xff0c;周五发布。 本周刊开源&#xff08;GitHub: SoftwareTestingWeekly &#xff09;&#xff0c;欢迎提交 issue&#xff0c;投稿或推荐软件测试相关的内容。 科普 Windows11 杨净 梦晨 微软 CEO 纳德拉曾说&am…

面试 Notes|2021 年秋季 Android 弱鸡艰难求职记。。。

扯犊子之前&#xff0c;先放一张面试图吧&#xff1a; 求职&#xff1f;求生&#xff1f;Start… 说来也怪&#xff0c;从入职的第一天就觉得很不舒服&#xff0c;然后慢慢产生离开的念头&#xff0c;随后转变思想&#xff0c;回去打算按照步骤继续学习&#xff0c;避免下次求…

微信官方:刚刚拆散一桩19万元的姻缘

来源:微信派 这种微信电话&#xff0c;你一定还没接到过。 来自云南的张先生最近凑巧接到了一个。 接到微信支付客服电话时&#xff0c;他正在进行一笔19万元的转账。张先生称&#xff0c;他在某视频平台结识一位“女神”&#xff0c;“女神”主动要求加张先生微信&#xff0c;…

苹果新版iOS疯狂致敬安卓和微信,新Mac搭载自研CPU!这届苹果开发者大会料足槽点密...

点击上方“3DCVer”&#xff0c;选择“星标” 干货第一时间送达 当你一夜醒来&#xff0c;无数个关于苹果最新发布会的片段已铺天盖地。 有说苹果自嗨的——因为作为史上最特殊的一次WWDC&#xff0c;库克完全就在空无一人的会场独自演讲。 也有吐槽苹果这次疯狂“致敬”谷歌、…

苹果出现长方形透明框_看到我卧槽!这是苹果史上最疯狂的开发者大会

一场疫情加一场暴乱&#xff0c;让过久了滋润日子的苹果在2020年尝到辛酸... but...收入可减&#xff0c;店面可关&#xff0c;一年一度的 WWDC 大会可不能不办&#xff01; 在此生意艰难之际&#xff0c;没有什么比这管鸡血更能提振消费者的热情了&#xff5e; 按照惯例&#…

疯狂ios讲义之创建cocos2d项目(3)

13.3.3 cocos2d项目结构和代码分析 这一节将向游戏开发者介绍HelloWorld项目的目录结构&#xff0c;以及各个部分是如何协同工作的。通过本节的学习&#xff0c;你会对各个部分之间的联系有个大致的了解。 图13.22显示了HelloWorld项目的项目导航面板。 图13.22 cocos2d项目引…

2016如何突破自我,这么疯狂的事谁敢做

2016一定要做一件令自己疯狂的事&#xff0c;想想自己20多年过去了&#xff0c;却发现没有什么可以回忆的事情是多么的悲催…… 再不疯狂我们就老了…… 2016趁自己还年轻&#xff0c;还有激情&#xff0c;还有动力&#xff0c;放肆的去疯狂…… 一定要疯狂的去玩&#xff0c;…

前有视觉中国后有来电,知识产权勒索为何屡禁不止?

不久前&#xff0c;一张黑洞照片在全网引发了轩然大波&#xff0c;因知识产权被外界熟知的公司“视觉中国”在诸多蓝V的狂轰滥炸下狼狈收场。起因就在于&#xff0c;视觉中国高举知识产权大旗却对外行使近乎于“敲诈勒索”之事。“黑洞事件”后&#xff0c;就在公众以为知产行业…

2016如何突破自我,必做十件疯狂的事

2016一定要做一件令自己疯狂的事&#xff0c;想想自己20多年过去了&#xff0c;却发现没有什么可以回忆的事情是多么的悲催…… 再不疯狂我们就老了…… 2016趁自己还年轻&#xff0c;还有激情&#xff0c;还有动力&#xff0c;放肆的去疯狂…… 一定要疯狂的去玩&#xff0…

[android基础]《疯狂android讲义》重点整理(2)

十、Service与BroadcastReceiver&#xff1a; 1.Service与Activity还有一点相似之处&#xff0c;它们都是从Context派生出来的&#xff0c;因此它们都可调用Context里定义的如getResources()、getContentResolver()等方法。 2.与配置Activity相似的是&#xff0c;配置Service时…

大厂地震,疯狂裁员大换血,面试冲击大厂Android移动开发工程师就在此时

前段时间在准备面试跳槽Android高级工程师时&#xff0c;发现各个大厂都在疯狂裁员&#xff0c;对于处于大厂之中的程序员来说&#xff0c;无疑是一场大地震&#xff01;但对于新想要冲击大厂的朋友们来说也是一场非常大的机遇&#xff01; 不过在积极备战大厂时&#xff0c;发…

男子刷机多次拒绝来电 维修师傅的做法被网友怒赞

昨日&#xff0c;一段男子到维修店刷机的视频在抖音上火了&#xff0c;目前已经有18万人点赞。 视频画面中&#xff0c;一男子前往手机维修店&#xff0c;表示忘记密码要刷机。 师傅查看时手机突然来了个电话&#xff0c;维修师问男子要不要接一下电话&#xff0c;男子说“不接…

街电、来电、小电、怪兽们熬出了头?

配图来自Canva可画 近期&#xff0c;共享充电宝涨价的消息甚嚣尘上&#xff0c;一众涨价哀怨声中还夹杂着几条共享充电宝安全隐患的吐槽声。 2015年&#xff0c;共享经济崛起&#xff0c;万物共享的概念深入人心。彼时共享经济正火热&#xff0c;单车、充电宝、雨伞、鲜花等物…

安卓来电归属地_唯一数码带你看WWDC | 数码怪圈,安卓、IOS、WP居然互相抄袭

IOS一直是手机领域的系统高端产品&#xff0c;也一直是其他手机争相模仿的对象&#xff0c;不过这些年来&#xff0c;苹果是否有点“黔驴技穷”&#xff1f;比如这次WWDC2020开完后&#xff0c;网上一度的风评是&#xff1a;“苹果终于实装了这些安卓/WP上的功能。” 其实&…

安卓手机来电防火墙_手机号变“广告号”?来电显示暗藏黑色利益链!你可能也被卷入其中...

微调查&#xff1a;手机号变“广告号”&#xff1f;想取消&#xff0c;先交钱。来电显示暗藏黑色利益链&#xff01;道钉说说你现在还接谁的电话&#xff0c;你的内心独白是什么&#xff1f; 当下&#xff0c;几乎人人手机上都会有“来电显示”。智能手机还会显示特殊的“标注”…