vant当中van-list的使用

vue3 van-list van-pull-refresh实现上拉加载,下拉刷新 用于展示长列表,当列表即将滚动到底部时,会触发事件并加载更多列表项。用该组件可实现上拉加载。两个变量控制加载状态,当组件滚动到底部时,会触发 load 事件并将。事件,在事件的回调函数中可以进行同步或异步操作,操作完成后将。此时可以发起异步操作并更新数据,数据更新完毕后,将。若数据已全部加载完毕,则直接将。// 如果返回数据为空,表示已加载完成。 阅读详情

van-list里面的元素不能有float样式,否则会连续触发 load 事件
原代码

<template>
  <div class="about">
    <van-tabs v-model="active" sticky @change="getTypeDate">
      <van-tab v-for="(tab) in typeList" :title="tab.name" :key="tab.id">
        <div :style="{height: contentHeight}" class="pic-content">
          <van-list
            :finished="finished"
            :finished-text="finishedText"
            v-model="loading"
            :offset="10"
            :immediate-check="false"
            @load="getserviceList"
          >
          <!------------------------------------------------- 修改前代码 --------------------------------------------->
              /*<div
                class="pic-box"
                v-for="(serve) in serviceList"
                :key="serve.id"
                @click="router(serve)"
              >
                <div class="pic-item">
                  <img
                    v-if="serve.picturePath"
                    :src="$BASE_PICTUREPATH_URL + serve.picturePath.split(',')[0]"
                  >
                </div>
                <p>{{serve.name}}</p>
                <p class="price-red">¥{{serve.price}}</p>
              </div>*/
              <!------------------------------------------------- 修改前代码 --------------------------------------------->
          </van-list>
        </div>
      </van-tab>
    </van-tabs>
  </div>
</template>
<script>
import { Tab, Tabs, List, Cell, Row, Col } from "vant";
import { FetchServeType, FetchServeList } from "../apis/serve.js";

export default {
  data() {
    return {
      active: 0,
      typeList: [],
      serviceList: [],
      type: "",
      finishedText: "",
      finished: false,
      pageNum: 1,
      pageSize: 10,
      contentHeight: 0,
      loading: false
    };
  },
  mounted() {
    this.getOrderStyle();
    this.contentHeight = document.documentElement.clientHeight - 66 - 40 + "px";
  },
  methods: {
    async getOrderStyle() {
      let res = await FetchServeType();
      if (res.data && res.data.success) {
        this.typeList = res.data.data;
        this.type = res.data.data[0].name;
        this.getTypeDate();
      }
    },
    getTypeDate() {
      this.pageNum = 1;
      this.type = this.typeList[this.active].name;
      this.serviceList = [];
      this.finishedText = "";
      this.finished = false;
      this.getserviceList();
    },
    async getserviceList() {
      let toast = this.$toast.loading({
        mask: true,
        message: "加载中..."
      });
      const { type, pageNum, pageSize } = this;
      let params = {
        type,
        pageNum,
        pageSize
      };
      let res = await FetchServeList(params);
      this.loading = false;
      toast.close();
      if (res.data && res.data.success) {
        let list = (res.data.data && res.data.data.list) || [];
        if (pageNum > 1) {
          this.serviceList = [...this.serviceList, ...list];
        } else {
          this.serviceList = list;
        }
        // 如果当前页数 = 总页数,则已经没有数据
        if (res.data.data.pageNum === res.data.data.pages) {
          this.finished = true;
          this.finishedText = "- 没有更多了-";
        }
        // 如果总页数大于当前页码,页码+1
        if (res.data.data.pages > pageNum) {
          this.pageNum++;
        }
      }
      console.log("FetchServeList: ", this.serviceList);
    }
  }
};
</script>

<style lang="scss" scoped>
.pic-content {
  overflow-y: scroll;
  -webkit-overflow-scrolling: touch;
  .pic-box {
  /****************************修改前代码***************************/
    background-color: #fff;
    overflow: hidden;
    break-inside: avoid;
    box-sizing: border-box;
    margin-bottom: 0.7rem;
    padding: 0.8rem;
    width: 48%;
    height: 16rem;
    ~~float: left;~~ /**************不能有float样式*************/
    margin: 1%;
    border-radius: 4px;
     /****************************修改前代码***************************/
    p:nth-of-type(1) {
      padding: 0.8rem 0;
    }
    p:nth-of-type(2) {
      color: red;
    }
    .pic-item {
      height: 11rem;

      flex-direction: column;
      justify-content: center;
      overflow: hidden;
      img {
        width: 100%;
        height: auto;
        border-radius: 4px;
      }
    }
  }
}
</style>

// 修改后代码(注释部分为修改后代码)

<template>
  <div class="about">
    <van-tabs v-model="active" sticky @change="getTypeDate">
      <van-tab v-for="(tab) in typeList" :title="tab.name" :key="tab.id">
        <div :style="{height: contentHeight}" class="pic-content">
          <van-list
            :finished="finished"
            :finished-text="finishedText"
            v-model="loading"
            :offset="10"
            :immediate-check="false"
            @load="getserviceList"
          >
          <!------------------------------------------------- 修改后代码 --------------------------------------------->
            /*<van-row>
              <van-col
                span="12"
                class="pic-box"
                v-for="(serve) in serviceList"
                :key="serve.id"
                @click="router(serve)"
              >
                <div class="pic-item">
                  <img
                    v-if="serve.picturePath"
                    :src="$BASE_PICTUREPATH_URL + serve.picturePath.split(',')[0]"
                  >
                </div>
                <p>{{serve.name}}</p>
                <p class="price-red">¥{{serve.price}}</p>
              </van-col>
            </van-row>*/
            <!------------------------------------------------- 修改后代码 --------------------------------------------->
          </van-list>
        </div>
      </van-tab>
    </van-tabs>
  </div>
</template>
<script>
import { Tab, Tabs, List, Cell, Row, Col } from "vant";
import { FetchServeType, FetchServeList } from "../apis/serve.js";

export default {
  data() {
    return {
      active: 0,
      typeList: [],
      serviceList: [],
      type: "",
      finishedText: "",
      finished: false,
      pageNum: 1,
      pageSize: 10,
      contentHeight: 0,
      loading: false
    };
  },
  mounted() {
    this.getOrderStyle();
    this.contentHeight = document.documentElement.clientHeight - 66 - 40 + "px";
  },
  methods: {
    async getOrderStyle() {
      let res = await FetchServeType();
      if (res.data && res.data.success) {
        this.typeList = res.data.data;
        this.type = res.data.data[0].name;
        this.getTypeDate();
      }
    },
    getTypeDate() {
      this.pageNum = 1;
      this.type = this.typeList[this.active].name;
      this.serviceList = [];
      this.finishedText = "";
      this.finished = false;
      this.getserviceList();
    },
    async getserviceList() {
      let toast = this.$toast.loading({
        mask: true,
        message: "加载中..."
      });
      const { type, pageNum, pageSize } = this;
      let params = {
        type,
        pageNum,
        pageSize
      };
      let res = await FetchServeList(params);
      this.loading = false;
      toast.close();
      if (res.data && res.data.success) {
        let list = (res.data.data && res.data.data.list) || [];
        if (pageNum > 1) {
          this.serviceList = [...this.serviceList, ...list];
        } else {
          this.serviceList = list;
        }
        // 如果当前页数 = 总页数,则已经没有数据
        if (res.data.data.pageNum === res.data.data.pages) {
          this.finished = true;
          this.finishedText = "- 没有更多了-";
        }
        // 如果总页数大于当前页码,页码+1
        if (res.data.data.pages > pageNum) {
          this.pageNum++;
        }
      }
      console.log("FetchServeList: ", this.serviceList);
    }
  }
};
</script>

<style lang="scss" scoped>
.pic-content {
  overflow-y: scroll;
  -webkit-overflow-scrolling: touch;
  .pic-box {
  /************************ 修改后代码**************************/
   background-color: #fff;
    overflow: hidden;
    box-sizing: border-box;
    margin-bottom: 0.7rem;
    padding: 0.8rem;
    height: 16rem;
    border-radius: 4px;
    /************************ 修改后代码************************ **/
    p:nth-of-type(1) {
      padding: 0.8rem 0;
    }
    p:nth-of-type(2) {
      color: red;
    }
    .pic-item {
      height: 11rem;

      flex-direction: column;
      justify-content: center;
      overflow: hidden;
      img {
        width: 100%;
        height: auto;
        border-radius: 4px;
      }
    }
  }
}
</style>

CT前瞻(二):Vant4实战之Card卡片与Cell单元格 最近在项目开发和学习的过程中,涉及到了Vant UI(简称Vant)的使用,主要还是涉及到了Card卡片和Cell单元格的使用,这个系列的文章就简单记录一下这个实战过程和学习经历,这篇文章介绍关于Card卡片和Cell单元格的实战案例。 阅读详情

相关推荐

基于Vue3+vant4 实现多表单提交校验

基于Vue3+vant4 实现多表单提交校验

前端菜菜DayDayUp的博客 4219

vant之van-list的使用以及一些坑的解决方式

文章目录第一步,要使用vant组件,安装好vant,npm i vant -S第二步,在你要用到的地方js中引入,或者在src/main.js里面引入第三步,在template中引用第四步,js中重要代码第五步,解决遇到的坑 第一步,要使用vant组件,安装好vant,npm i vant -S 第二步,在你要用到的地方js中引入,或者在src/main.js里面引入 import Vue from ‘vue‘; import { List } from ‘vant‘; Vue.use(List); 这

rayong的博客 2万+

【vant】van-list下拉加载更多onload事件

【vant】van-list下拉加载更多onload事件 问题描述 van-list编写下拉加载更多,利用van-list自带的下拉加载事件@load="onLoad",但是发现有次数限制,任有部分条件下无法下拉加载更多。后来发现原因,执行完,之后finished恢复false,同时将当前页恢复为1,不写的话,代码不会自己恢复,因为这些参数是全局变量,所以变化之后,就保持了。所以,在代码执行前要做一个恢复。细节很重要,因为这个细节,耽误了很久时间。 this.currentPage = 1; //每次走完

易小花的博客 7183

<van-list> </van-list>列表组件的使用

<template> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> <van-cell v-for="(item, index) in list" :key="index"> {{item}}} </van-cell> </van-list> </template> &l.

weixin_49577940的博客 7838

【vant】van-list滚动加载onload事件的常见问题与优化方案

本文深入解析了Vant组件库中van-list滚动加载onload事件的常见问题与优化方案。针对onload事件重复触发、首次加载异常等痛点,从CSS布局陷阱、immediate-check属性、数据量控制及核心加载逻辑四个维度提供系统解决方案,帮助开发者实现稳定流畅的滚动加载体验。

weixin_29012765的博客 381

Vant van-list滚动加载避坑指南:解决onload事件重复触发问题

本文深入剖析了Vant van-list组件滚动加载时onload事件重复触发的核心原因,包括CSS布局干扰、数据状态管理不当等。提供了从CSS布局规范到JavaScript逻辑控制的完整解决方案,重点讲解了如何通过精细化状态管理和防并发锁彻底根治此问题,确保滚动加载性能与稳定性。

q6r7s8t9的博客 1013

使用 Vant van-pull-refresh van-list van-tab van-search遇到的问题总结

使用 Vant van-pull-refresh van-list van-tab van-search遇到的问题总结 通过mixin封装van-pull-refresh + van-list , 实现下拉刷新 + 上拉加载,兼容切换tab changeTab + 搜索search // mixin // 下拉刷新 + 上拉加载 export default { data () { return { list: [], page: 1, p

weixin_43409286的博客 6838

【踩坑记】vant-ui中van-list组件手机滚动加载不生效或刚进页面就执行全部一直调接口

踩坑,vant-ui中van-list组件手机滚动加载不生效或杠精页面就执行全部一直调接口

m0_51614469的博客 1404

vant4 van-list组件的使用

不能直接赋值,否则每次请求后的页面高度都是在页面底部,导致一直触发onLoad方法请求接口多次。

qq_46738283的博客 719

用MFRC522+STM32打造智能门禁:从硬件选型到云端控制全流程

本文详细介绍了基于STM32微控制器和MFRC522射频模块构建智能门禁系统的完整流程。从硬件选型、电路设计、底层驱动开发,到系统软件架构与状态机设计,并最终实现通过ESP8266模块接入云端平台(如OneNET)进行远程控制和数据可视化。项目深入探讨了MFRC522的SPI通信、卡片操作流程、天线调试以及云端MQTT集成等关键技术,为嵌入式开发者提供了一个从本地感知到云端管控的物联网项目实战参考。

raspberrypi5的博客 736

使用python获取同花顺免费版和同花顺远航版自选股数据用于量化交易

在做量化交易时,有时需要在盘中实时监控同花顺自选股的数量,以便灵活地自定义提醒、捕捉买卖时点等。那么,如何使用python获取同花顺自选股数据呢?

tzzqn2008的专栏 3652

vant使用van-list组件

使用vant组件库实现列表的下拉刷新与上拉加载

yerimi的博客 1590

VMware ESXi 7.0下Intel网卡SR-IOV配置实战:解决虚拟化网络延迟问题

本文详细介绍了在VMware ESXi 7.0环境下为Intel网卡配置SR-IOV(单根I/O虚拟化)的完整实战流程。通过硬件辅助直通技术,虚拟机可直接访问物理网卡资源,有效绕过虚拟化层瓶颈,从而显著降低网络延迟和CPU开销,适用于金融交易、实时计算等对性能敏感的场景。

embedding5hiker的博客 547

html中使用vant的van-list列表懒加载

使用van-list标签将需要进行懒加载的内容包住 <van-list class="activity" v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> <div class="activity_cont" v-for="(item,index) in activitylist" :key="index">

hy3528的博客 5842

【Cadence】stb仿真和ac仿真——以一个简单的全差分反相放大器仿真为例

最近在补一些仿真方法学的问题,以及一些一直以来都有点模糊的概念,简单记录一下。搭建一个以两个CMOS反相器构成的全差分放大器(28nm工艺,PMOS和NMOS尺寸一致)激励的设置方便共模和差模仿真用同一个TB(这里有一个问题:这个放大器需要在开环下仿真还是闭环下?哪些放大器应用在开环,哪些闭环?这种应用场景不同会导致需要仿真得到开环还是闭环增益,或者环路增益?(我知道放大器在设计的时候肯定都是闭环应用的多,但是什么时候没必要闭环应用?光验证ac和stb仿真是否一样的话有必要有回路吗?

weixin_44951108的博客 5万+

reCAPTCHA v3隐形验证码实战:5分钟教你用Capsolver获取0.9高分令牌

本文提供了一份reCAPTCHA v3隐形验证码的实战指南,详细解析其浏览器评分机制,并手把手教你使用Capsolver自动化获取0.9高分令牌。内容涵盖从环境侦察、关键参数(sitekey与pageAction)提取,到API调用、结果轮询及令牌使用的完整流程,旨在帮助开发者高效绕过自动化交互障碍。

weixin_29314405的博客 343

列表分页的实现-使用vant 2.x下的van-list

this.newsList.length >= this.totalElements ||//判定方式一:新闻列表newsList的元素数量已经达到了能够请求的总元素数量。const res = await this.loadPageData(this.currentPage)//注意这里后面不能直接取.datas。this.newsList = [...this.newsList, ...res.datas.content]//数组拼接。this.loading = false//结束加载状态。

2301_76891881的博客 1811

51单片机——LCD12864驱动函数深度解析与实战优化

本文深入解析了51单片机驱动LCD12864液晶屏的核心驱动函数,从底层时序、关键延时到地址计算进行逐行剖析,并针对常见显示问题提供系统性的调试技巧与实战优化方案。重点探讨了如何将基础代码优化为稳定高效的驱动,涵盖延时精准化、批量写入及显示缓冲区等高级技巧,旨在帮助开发者从“点亮”屏幕进阶到“精通”驱动,确保显示稳定可靠。

weixin_29190169的博客 78

h5使用vant分页,van-list,没有使用分页器Pagination,

weixin_48557454的博客 1501

【知识点讲解】大模型参数量与计算量(FLOPs)估算方法

指标参数量 (Params)计算量 (FLOPs)含义模型的大小,静态模型的计算复杂度,动态决定因素模型结构(宽度、深度)模型结构 +输入数据(B, S)影响内存占用、磁盘空间运行速度、能耗单位M (百万), B (十亿)工具thopptflopstorchinfothopptflopsfvcore重要提示FLOPs ≠ 速度:FLOPs 是理论计算量。实际速度还受内存带宽 (Memory Bandwidth)并行度硬件架构等因素严重影响。

AI浩 2085

基于HetConv与Dual策略的YOLOv8轻量化设计-CSPHet结构的优化与实现

在计算机视觉中,YOLOv8作为目标检测领域的最新版本,通过引入多种改进来提升检测精度和速度。然而,提升精度和保持实时性能往往需要更多参数与计算量。本文提出一种结合Dual思想与HetConv的新型轻量化结构,称为CSPHet。CSPHet能够在保持YOLOv8检测精度的基础上有效减少约70万参数量,实现模型的轻量化和速度的提升。HetConv(Heterogeneous Convolution)是一种混合卷积技术,通过同时使用1x1、3x3等不同大小的卷积核,来捕捉不同尺度的特征。

博客 1314

vant van-list父容器要求

【代码】vant van-list父容器要求。

amy_jork的博客 493

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

解决 vant使用 van-list、van-pull-refresh 组合使用会出现两个loading

【代码】解决 vant使用 van-list、van-pull-refresh 组合使用会出现两个loading。

qq_43571357的博客 1870

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

vant的list 一直请求数据,van-list 的load方法不断连续的调用方法请求数据,诡异现象。完整解决方案

vant的list 一直请求数据,van-list 的load方法不断连续的调用方法请求数据,诡异现象。完整解决方案

橙-极纪元-JJYCheng 8158

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【vant】van-list列表下拉加载更多onload事件

介绍 van-list是瀑布流滚动加载,用于展示长列表,当列表即将滚动到底部时,会触发事件并加载更多列表项。 引入 import Vue from 'vue'; import { List } from 'vant'; Vue.use(List); 页面渲染 <van-list class="mylist" v-model="loading" :finished="finished" finished-text="没有更多了" @load="

夏夏 2775
上一篇: iOS页面上下滚动卡顿
下一篇: css文字属性的继承
柚子Christy
博客等级 码龄10年 2粉丝 22原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值