vant van-pull-refresh + van-list实现list列表支持搜索和下拉刷新

1 介绍

在使用 van-pull-refresh + van-list实现list列表下拉刷新时遇到几个问题在这里进行一个总结。

2 出现的问题

问题一:当van-pull-refresh + van-list组合使用时,下拉刷新会调用两个加载图标。
解答:去除van-pull-refresh加载图标,防止下拉刷新时出现两个加载图标

      <!--  去除加载图标,防止下拉刷新时出现两个加载图标 --><template #loading><div></div></template>

问题二: 通过筛选条件查询数据时,van-list会请求多次接口
解答:因为当this.finished = false时, 会触发 onLoad 事件,onLoad方法会调用一次fetchData方法,onRefresh方法也会调用fetchData方法这就使得你会调用两次接口。所以我们只好把查询单独写一个方法onSearch,然后在onLoad中判断是不是刷新操作,如果说是刷新就设置为false,只调用onload方法。

    onSearch() {this.medicalList = []this.pageIndex = 1this.finished = falsethis.loading = truethis.refreshing = falsethis.fetchData()},onLoad() {if (this.refreshing) {this.medicalList = []this.refreshing = false}// 触底加载下一页数据// 网页刚打开也会触发一次this.fetchData()},// 下拉刷新onRefresh() {this.medicalList = []this.pageIndex = 1// finished 设置为 false 则会触发 onLoad 事件this.finished = falsethis.loading = truethis.fetchData()},

3 结果展示

这个页面叫做TreatmentStation分为两部分:顶部的搜索和中间的内容。中间的内容是一个单独的组件(MedicalList),是TreatmentStation的子组件,父组件通过传值的方式将查询条件传给子组件,子组件调用接口获取数据,渲染至页面。
在这里插入图片描述

4 代码实现

TreatmentStation 组件

<template><div id="treatment"><!-- 筛选条件 --><div class="filter-criteria"><van-searchv-model="model.keyword"placeholder="请输入患者姓名/就诊号"show-action@search="onSearch"><template #action><div style="display: flex; align-items: center;justify-content: center"><van-button size="small" type="info" @click="onSearch">搜索</van-button></div></template></van-search><van-dropdown-menu active-color="#1989fa"><van-dropdown-item ref="dateItem" v-model="model.appointTime" :title="model.appointTime.toString()"><van-datetime-pickerv-model="currentDate"title="选择日期"type="date"@cancel="onCancelDate"@confirm="onConfirmDate"/></van-dropdown-item><van-dropdown-item v-model="model.departmentName" :options="model.deptOption" @change="changeDropdown"/><van-dropdown-item v-model="model.my" :options="model.myOption" @change="changeDropdown"/></van-dropdown-menu></div><back-top/><!-- list--><medical-list ref="medicalList" :model="model"/></div>
</template><script>
import moment from 'moment'
import MedicalList from './components/medical-list.vue'
import api from '../../api'
import BackTop from '../../components/back-top.vue'export default {name: 'TreatmentStation',components: {BackTop, MedicalList},data() {return {model: {keyword: '',my: true,myOption: [{text: '我的', value: true},{text: '全部医师', value: false}],departmentName: '',deptOption: [{text: '全部科室', value: ''}],appointTime: ''},medicalList: [],pageIndex: 1,currentDate: new Date()}},mounted() {//this.model.appointTime = moment().format('YYYY-MM-DD')const sessionModel = JSON.parse(sessionStorage.getItem('sessionModel'))if (sessionModel !== null) {this.model = sessionModel}this.getDepartList()},methods: {// 搜索确定onSearch(val) {this.$refs.medicalList.onSearch()},// 搜索框取消按钮onCancel() {// Toast('取消')this.$refs.medicalList.onSearch()},onConfirmDate(value) {this.model.appointTime = moment(value).format('YYYY-MM-DD')this.$refs.dateItem.toggle()this.$refs.medicalList.onSearch()},onCancelDate() {// 收起this.$refs.dateItem.toggle()},changeDropdown(value) {this.$refs.medicalList.onSearch()},// 获取所有科室getDepartList() {api.getDepartment().then(res => {this.model.deptOption = res.data.map(item => ({text: item.name,value: item.name}))this.model.deptOption.unshift({text: '全部科室', value: ''})}).catch(error => {console.log(error)})}},beforeRouteLeave(to, from, next) {// 当路由跳转到治疗页面时存储sessionModelif (to.name === 'treatmentContent') {sessionStorage.setItem('sessionModel', JSON.stringify(this.model))} else {sessionStorage.removeItem('sessionModel')}next()}
}
</script><style scoped>
#treatment {height: 100%;
}
</style>

MedicalList组件

<template><div id="medical-list"><van-pull-refreshv-model="refreshing":class="{'content': activeClass}":offset="100"success-text="刷新成功"@refresh="onRefresh"><!--  去除加载图标,防止下拉刷新时出现两个加载图标 --><template #loading><div></div></template><van-listv-model="loading":finished="finished"finished-text="没有更多了"@load="onLoad"><van-cell v-for="item in medicalList" :key="item.id":to="{name:'treatmentContent',params:{medicalInfo_Id: item.id,appointTime: model.appointTime,patientName: item.patientName,patient_Id: item.patient_Id}}"is-linkstyle="text-align: left; align-items: center"><template #title><span style="margin-left: 10px">{{ item.patientName }}</span></template><template #label><span style="margin-left: 10px">{{ '就诊号: ' + item.medicalNo }}</span></template><template #default><span>{{ item.bedNumber ? '床号: ' + item.bedNumber : '' }}</span></template><template #icon><van-icon name="contact-o" size="25px"/></template></van-cell></van-list></van-pull-refresh></div>
</template>
<script>
import api from '../../../api'export default {name: 'MedicalList',props: ['model'],data() {return {medicalList: [],loading: false,finished: false,refreshing: false,pageIndex: 1,pageSize: 50,pullRefreshDisabled: false}},methods: {// list列表方法onLoad() {if (this.refreshing) {this.medicalList = []this.refreshing = false}// 触底加载下一页数据// 网页刚打开也会触发一次this.fetchData()},// 下拉刷新onRefresh() {this.medicalList = []this.pageIndex = 1// finished 设置为 false 则会触发 onLoad 事件this.finished = falsethis.loading = truethis.fetchData()},onSearch() {this.medicalList = []this.pageIndex = 1this.finished = falsethis.loading = truethis.refreshing = falsethis.fetchData()},// 获取就诊信息数据fetchData() {api.query({'page.index': this.pageIndex,'page.size': this.pageSize,My: this.model.my,keyword: this.model.keyword,appointTime: this.model.appointTime,departmentName: this.model.departmentName}).then(res => {if (!res.data) returnthis.medicalList = this.medicalList.concat(res.data.rows)// 所有数据加载完成if (this.medicalList.length >= res.data.total) {this.finished = true} else {this.pageIndex++}}).catch(error => {console.log(error)this.finished = true}).finally(() => {this.refreshing = falsethis.loading = false})},bedNumber(value) {return value ? '床号:' + value : ''}},computed: {activeClass() {return this.medicalList.length <= 5}}
}
</script>
<style scoped>
#medical-list {
}#medical-list .content {height: 80vh;
}
</style>

back-top组件
悬浮回到顶部按钮

<template><!--  回到顶部悬浮按钮--><div id="back-top"><van-sticky><van-icon v-if="showBackTop" class="back-to-top" name="back-top" size="20px" @click="scrollToTop"/></van-sticky></div>
</template>
<script>
export default {name: 'BackTop',data() {return {showBackTop: false}},beforeDestroy() {window.removeEventListener('scroll', this.handleScroll)},mounted() {window.addEventListener('scroll', this.handleScroll)},methods: {handleScroll() {this.showBackTop = window.pageYOffset >= 300},scrollToTop() {window.scrollTo({top: 0, behavior: 'smooth'})}}
}
</script><style scoped>
#back-top .back-to-top {position: fixed;bottom: 50px;right: 30px;padding: 15px 15px;background-color: whitesmoke;color: black;border-radius: 25px;cursor: pointer;z-index: 1000;
}</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/431667.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刷题小记3----每日一题精进Java技能(详细思路解析✅)

文章目录 一、两种排序方法二、最小公倍数三、另类加法四、倒置字符串五、统计回文 一、两种排序方法 题目链接&#xff1a;两种排序方法 题目描述&#xff1a; 考拉有n个字符串字符串&#xff0c;任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法&#x…

Web端云剪辑解决方案,提供前端产品源码

美摄科技作为业界领先的视频技术服务商&#xff0c;匠心打造Web端云剪辑解决方案&#xff0c;以前沿技术赋能企业用户&#xff0c;开启视频创作与编辑的新纪元。 【云端赋能&#xff0c;重塑剪辑体验】 美摄科技的Web端云剪辑解决方案&#xff0c;颠覆了传统视频编辑的局限&a…

zabbix“专家坐诊”第257期问答

问题一 Q&#xff1a;zabbix5.0监控项里的键值&#xff0c;怎么设置变量值&#xff1f;{#ABC} {$ABC} 都识别不到变量。 A&#xff1a;可以参考一下这个。 问题二 Q&#xff1a;我想问一下用odbc创建监控项&#xff0c;生成了json格式&#xff0c;如何创建一个触发器去判断里面…

人工智能武器化与国家网络威慑机制选择

文章目录 前言一、人工智能武器化与国家网络威慑机制选择1、人工智能时代国家推动网络威慑的逻辑二、迈向攻防平衡期的网络威慑机制选择三、攻防平衡状态下的网络威慑机制选择前言 威慑理论是国家应对战争威胁的重要思想,同时也是一种严格的信号传递机制。自21世纪初期“网络…

方法部分 学习

方法是程序中最小的执行单元 方法的定义调用 public static void 方法名&#xff08;&#xff09;{ 方法体 } 写在main方法外面&#xff0c;在main函数里面直接调用带参数&#xff1a;public static void 方法名&#xff08;int num1 &#xff0c; int num2&am…

成都睿明智科技有限公司电商服务引领品牌跃升

在当今这个数字化浪潮汹涌的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为众多品牌商家竞相追逐的新战场。在这片充满机遇与挑战的领域中&#xff0c;成都睿明智科技有限公司以其专业的抖音电商服务&#xff0c;成为了众多商家信赖的伙伴。今天&#xff0c;…

在虚幻引擎中创建毛发/头发

在虚幻引擎中创建毛发/头发 , 首先开启两个插件 Groom 和 Alembic Groom Importer 打开蒙皮缓存 导出人物模型 将人物导入Blender , 选择需要种植头发的点 指定并选择 点击毛发 这里变成爆炸头了 , 把数量和长度调一下 切换到梳子模式 调整发型 导出为abc , 文件路径不…

针对 Linux SSH 服务器的新攻击:Supershell 恶意软件危害易受攻击的系统

ASEC 研究人员发现了针对保护不善的 Linux SSH 服务器的新攻击。 在其中&#xff0c;黑客使用了用Go编写的 Supershell恶意软件。 该后门使攻击者能够远程控制受感染的系统。 初次感染后&#xff0c;黑客启动扫描仪来寻找其他易受攻击的目标。 据信这些攻击是使用从已受感…

kubernetes K8S 挂载分布式存储 ceph

目录 一、Ceph简介 二、Ceph核心组件介绍 三、安装Ceph集群 1初始化实验环境 1.1、配置静态IP&#xff1a; 1.2、配置主机名&#xff1a; 1.3、配置hosts文件&#xff1a; 1.4、配置互信 1.5、关闭防火墙 1.6、关闭selinux 1.7、配置Ceph安装源 1.8、配置时间同步 …

【自学笔记】支持向量机(4)——支持向量回归SVR

引入 SVM解决了分类问题&#xff0c;而用类似方法解决回归问题的模型称为支持向量回归。目标是得到一个模型&#xff0c;使输出的 f ( x ⃗ ) f(\vec{x}) f(x )与 y y y尽可能接近。 传统的回归模型直接计算 f ( x ⃗ ) f(\vec{x}) f(x )与 y y y的差距作为损失&#xff0c;当两…

Linux驱动开发(速记版)--驱动基础

第一章 初识内核源码 Linux系统源码提供了操作系统的核心功能&#xff0c;如进程管理、内存管理、文件系统等。 BusyBox这类的文件系统构建工具&#xff0c;则提供了在这些核心功能之上运行的一系列实用工具和命令&#xff0c;使得用户能够执行常见的文件操作、文本处理、网络配…

爬虫逆向学习(八):Canvas画图滑块验证码解决思路与绕过骚操作

此分享只用于学习用途&#xff0c;不作商业用途&#xff0c;若有冒犯&#xff0c;请联系处理 逆向站点 aHR0cHM6Ly93d3cuYm9odWF5aWNhaS5jbi8/VTU4Iy9jaGVtaWNhbC9sb2dpbj9yZWRpcmVjdD0lMkZjaGVtaWNhbA 滑块验证码样式 滑块验证码研究 一般的滑块验证码都是会直接提供滑块和…

Diffusion Model Stable Diffusion(笔记)

参考资料&#xff1a; 文章目录 DDPM架构模型如何拥有产生逼真图片的能力Denoise模型功能Denoise模型如何训练考虑进文字 文生图流程(Stable Diffusion) DDPM架构 模型如何拥有产生逼真图片的能力 Denoise模型功能 通过Denoise将一个噪音图一步步生成为目标图像 Denoise实际…

【开源免费】基于SpringBoot+Vue.JS墙绘产品展示交易平台(JAVA毕业设计)

本文项目编号 T 049 &#xff0c;文末自助获取源码 \color{red}{T049&#xff0c;文末自助获取源码} T049&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

echarts根据容器宽度动态截取展示横坐标名称

效果如下&#xff1a; 初始状态&#xff1a; 缩放页面后&#xff1a; 代码地址&#xff1a;代码地址-面包多

Oracle 19c 使用EMCC 监控当前所有数据库

一.EMCC简介 EMCC&#xff0c;全称Oracle Enterprise Manager Cloud Control&#xff0c;是Oracle提供的一套集中化监控工具&#xff0c;可以对数据库、操作系统、中间件等进行监控&#xff0c;通过OMS&#xff08;Oracle Management Service&#xff09;收集监控数据并将监控信…

赛氪作媒体支持单位受邀参加首届科普翻译与跨学科专业学术研讨会

2024年9月22日&#xff0c;正值全国科普日之际&#xff0c;首届科普翻译与跨学科专业学术研讨会在上海健康与营养研究所信息中心励志厅成功举行并圆满结束。此次研讨会汇聚了来自全国各地的近60名专家学者、学界及企业界代表&#xff0c;共同探讨科普翻译与跨学科专业的发展。作…

OpenAI首款芯片曝光 专为文生视频Sora打造

近日&#xff0c;OpenAI首款芯片的消息终于曝光。据了解OpenAI已经预定了台积电的A16工艺制程&#xff0c;用于制造AI芯片&#xff0c;专为Sora视频应用打造&#xff0c;旨在提升Sore的视频生成能力。 年初曾有报道称&#xff0c;OpenAI CEO奥特曼打算募集7万亿美元和台积电合…

新160个crackme - 064-CR-Game0.7

运行分析 需破解Name、Company、Serial PE分析 32位程序&#xff0c;EP Section为.text&#xff0c;猜测无壳 静态分析&动态调试 ida搜索关键字符串&#xff0c;双击进入函数 level 0 动调sub_401403函数&#xff0c;注释如上Serial输入JPL-168-39&#xff0c;level 0通过 …

比较器(算法中排序)

方式一&#xff1a;不常用 让实体类实现Comparable接口&#xff0c;泛型是需要比较的类型&#xff0c;同时重写compareTo方法 缺点&#xff1a;对代码有侵入性。 public class Student implements Comparable<Student> {private String name;private double score;// …