Vant2框架tab切换list不加载问题(切换后onload不继续触发)

news2024/12/26 22:53:51

遇到的问题:

van-list 加载,页面上有个切换的 van-tab,实现切换不同的类型,加载不同的list的功能。

Vant2 的 List 列表 就有个 bug,当切换 tab 的时候,它的 onload 没有自动触发。

然而在当前标签页,如果列表已经加载完毕再去切换,onload 就可以实现自动触发


真实项目复现问题 :

三种tab切换类型列表,默认展示列表,上拉到底会正常触发 @load="onLoad" 加载方法

但是当点击切换Tab标签页列表类型时,再切换回来,上拉至列表底部时

不再触发 @load="onLoad" 加载方法

( 一开始以为是页面高度导致的问题,排查到最后发现并不是,因为如果是高度有问题的话,那一开始拉到底部也并不会触发加载方法了,So 最后百度了一波,整理一下吧 )


项目实际解决方案:

切换时 将 finished 状态重置为 false 。


index.vue

<template>
  <div class="tl">
    <div ref="TabList">
      <van-tabs @click="onTabClick" v-model="tlForm.flag">
        <van-tab
          v-for="(item, index) in ['list1', 'list2', 'list3']"
          :title="item"
          :key="index"
        >
          <TabList
            :ref="'tabList' + index"
            :tlData="TabListData"
            :loading="Loading"
            :finished="Finished"
            :refreshing.sync="Refreshing"
            @onLoad="onLoad"
            @onRefresh="onRefresh"
          />
        </van-tab>
      </van-tabs>
    </div>
  </div>
</template>

<script>
import TabList from './TabList.vue';
import { getDataListApi } from '@api/index';

export default {
  components: { TabList },
  data() {
    return {
      Loading: false,
      Finished: false,
      Refreshing: false,
      TabListData: [],
      total: 0, // 总页数
      tlForm: {
        page: 1, // 分页第几页
        pageSize: 10, // 每页数据数
        flag: 0, // 标签类型
      },
    };
  },
  created() {
    this.onLoad();
  },
  methods: {
    onTabClick(index) {
      // this.Loading = true; // 项目影响不大
      // 需将Finished状态重置,否则切换再上拉时不加载
      this.Finished = false; //关键代码
      this.tlForm.flag = index;
      this.$nextTick(() => {
        this.TabListData = [];
        this.tlForm.page = 1;
        this.tlForm.pageSize = 10;
        this.onLoad();
      });
    },
    // 下拉刷新时重置参数
    onRefresh() {
      this.Loading = true;
      this.Finished = false;
      this.tlForm.page = 1;
      this.TabListData = [];
      this.onLoad();
    },
    // 加载 获取列表信息
    onLoad() {
      this.getDataList();
    },
    async getDataList() {
      if (this.Refreshing) {
        this.Refreshing = false;
        this.TabListData = [];
      }
      let { code, res } = await getDataListApi(this.tlForm);
      if (code === 0) {
        this.total = res.total;
        this.TabListData = this.TabListData.concat(res.list);
        this.Loading = false; // 加载状态结束
        if (this.TabListData.length >= this.total) {
          this.Finished = true; // 没有更多数据了
        } else {
          this.tlForm.page += 1;
        }
      }
    },
  },
};
</script>

<style lang="scss" scoped>
.tl {
  height: 100%;
}
</style>

TabList.vue

<template>
  <div class="tabList">
    <van-pull-refresh
      v-model="refreshingProps"
      success-text="刷新成功"
      @refresh="onRefresh"
    >
      <van-list
        v-if="tlData.length > 0"
        v-model="loadingProps"
        :offset="20"
        :finished="finished"
        :immediate-check="false"
        finished-text="没有更多了"
        @load="onLoad"
      >
        <!-- 列表详细内容 -->
      </van-list>
      <div v-else>暂无内容</div>
    </van-pull-refresh>
  </div>
</template>

<script>
export default {
  props: {
    tlData: {
      // 列表数据
      type: Array,
      default: () => [],
    },
    finished: {
      type: Boolean,
      default: false,
    },
    loading: {
      type: Boolean,
      default: false,
    },
    refreshing: {
      type: Boolean,
      default: false,
    },
  },
  watch: {
    loading(newVal) {
      this.loadingProps = newVal;
    },
    loadingProps(newVal) {
      this.$emit('update:loading', newVal);
    },
    refreshing(newVal) {
      this.refreshingProps = newVal;
    },
    refreshingProps(newVal) {
      this.$emit('update:refreshing', newVal);
    },
  },
  data() {
    return {
      loadingProps: false,
      refreshingProps: false,
    };
  },
  methods: {
    onLoad() {
      this.$emit('onLoad');
    },
    onRefresh() {
      this.$emit('onRefresh');
    },
  },
};
</script>

<style lang="scss" scoped>
.tabList {
  height: 100%;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMD第二季度财报:数据中心产品销售激增,接近总收入一半

#### 财报亮点 7月30日&#xff0c;AMD公布了截至6月29日的第二季度财务业绩&#xff0c;利润超过了华尔街的预期。根据TechNews的报道&#xff0c;最值得注意的是&#xff0c;AMD现在近一半的销售额来自于数据中心产品&#xff0c;而非传统的PC芯片、游戏主机或是工业与汽车嵌…

IDEA打开项目显示在顶端

问题 IDEA打开项目显示在顶端&#xff0c;更改到左侧 解决方案 删除项目中.idea文件,重新打开

【pikachu靶场】跨站脚本攻击详细教程Cross-Site Scripting(xss)

文章目录 XSS&#xff08;跨站脚本&#xff09;概述 1.反射型xss&#xff08;get&#xff09; 2.反射型xss&#xff08;post&#xff09; 3.存储型XSS 4.DOM型xss 5.DOM型XSS-X 6.xss之盲打 7.xss之过滤 8.xss之htmlspecialchars 9.xss之href输出 10.xss之js输出 XSS…

并发编程相关面试题-Synchronized

重量级锁实现的原理 1、synchronized是JVM内置锁&#xff0c;基于Monitor机制实现&#xff0c;依赖底层操作系统的互斥锁Mutex&#xff08;互斥量&#xff09;&#xff0c;它是一个重量级锁、 2、synchronized同步方法是通过方法中的access_flags中设置ACC_SYNCHRONIZED标志来…

换根dp学习总结3

我也不想搞这么多&#xff0c;但是这东西真的太难了&#xff0c;因为我还是个蒟蒻。算了蒟蒻继续写这次的总结了 寻找全图最远路径问题——Computer ——题目来源于hdu2196 题意&#xff1a;题目就是说会输入多组数据&#xff0c;每组数据给你一个n&#xff0c;表示结点的总数…

怎么评价程序员40岁了竟然还在撸代码?

怎么评价外卖员40岁了竟然还在送外卖&#xff1f; 怎么评价滴滴司机40岁了竟然还在跑滴滴&#xff1f; 怎么评价老师40岁了竟然还在教书&#xff1f;难道程序员的本职工作不是敲代码吗&#xff1f;无论你是管理层还是螺丝钉&#xff0c;工业环境下怎么可能一行代码都不敲呢&…

RocketMQ Dashboard安装

RocketMQ Dashboard 是一个基于 Web 的管理工具&#xff0c;用于监控和管理 RocketMQ 集群。它提供了一个用户友好的界面&#xff0c;使管理员能够轻松地查看和操作 RocketMQ 系统中的各种组件和状态。 主要功能包括&#xff1a; 集群管理: 监控和管理 NameServer 和 Broker …

web框架:django基础(二)

文章目录 django基础&#xff08;二&#xff09;1.回顾2.今日概要3.路由系统3.1 传统的路由3.2 正则表达式路由3.3 路由分发小结 3.4 name3.5 namespaceapp_namenamespace的多层嵌套 3.4 最后的 / 如何解决&#xff1f;3.5 当前匹配对象小结 4.视图4.1 文件or文件夹4.2 相对和绝…

《QDebug 2024年7月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Qt5 QML 在某些环境下&#xff0c;有些字体中文渲染有问题 如 Qt5.15 在部分安卓机上复制的复只有半截宽&#xff0c;半径的径字也不对&#xff0c;等等 用 Qt6.7 测试则正常&#xff0c;或者换成其他如小米、阿里巴巴…

Golang的TLS版本配置参数-排坑经历

一、背景 公司有个黑盒监控拨测组件&#xff0c;类似可以通过各种协议如HTTP、TCP、ICMP等等针对目标主机、目标IP、目标站点进行定时拨测&#xff0c;通过返回的状态码等信息来推断&#xff0c;目标业务系统/主机、站点是否存在异常&#xff0c;健康情况如何。 最近在配置一个…

一文搞懂机器学习!2024.6月最新!(附代码实现)

前言 机器学习入门精品文章 随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文介绍机器学习的基础内容。 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从数据中学习并做出决策或预测&am…

Jangow-1.0.1靶机漏洞复现(未完成)

首先&#xff0c;这个靶机只能使用VirtualBox打开&#xff0c;靶机下载地址为 https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 虚拟机软件下载地址为 Download_Old_Builds – Oracle VM VirtualBox 开启靶机后访问ip进入如下页面&#xff0c;点击site进入到一个…

【C++】哈希容器

unordered系列关联式容器 在之前的博文中介绍过关联式容器中的map与set&#xff0c;同map与set一样&#xff0c;unordered_set与unordered_set也是关联式容器。 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;查询效率可以达到logN&#xff1b;在…

详解HTTP代理与SOCKS代理之间的差异

代理服务器在网络安全和隐私保护方面&#xff0c;发挥着十分重要的作用。其中&#xff0c;HTTP代理和SOCKS代理是两种常见的代理方式&#xff0c;它们在原理、功能和应用场景上有着明显的差异。本文将为大家深入分析这两种代理之间的区别&#xff0c;帮助大家更好地选择适合自己…

Linux中如何添加磁盘分区

在Linux中添加分区通常涉及到几个步骤&#xff0c;包括识别磁盘、创建分区、格式化分区&#xff0c;以及挂载或将其用作特定的文件系统类型&#xff08;如LVM、RAID等&#xff09;。以下是一个基本的步骤指南&#xff0c;假设你正在使用命令行界面&#xff08;CLI&#xff09;和…

《技术人求职之道》之简历优化篇(下):技能与项目亮点,如何让你的简历熠熠生辉

摘要 本文将深入探讨技术求职者在撰写简历时的关键要素,包括专业技能的表达和项目经验的描述。文章首先提出专业技能描述的六条基本原则,包括统一技术词汇、标点符号一致性、技术关键字的驼峰命名法、技术分类、技术热度和掌握度排序以及慎用“精通”。接着,指导读者如何美…

FFmpeg Windows安装教程

一. 下载ffmpeg 进入Download FFmpeg网址&#xff0c;点击下载windows版ffmpeg。 下载第一个essentials版本就行。 二. 环境配置 上面源码解压后如下 将bin添加到系统环境变量 验证安装是否成功&#xff0c;输入ffmpeg –version&#xff0c;显示版本即为安装成功。

必应Bing国内广告开户、投放流程和避坑攻略!

必应Bing作为微软旗下的搜索引擎&#xff0c;不仅在全球范围内拥有庞大的用户群体&#xff0c;在中国也有着稳定的市场份额。为了让企业更好地利用必应Bing在国内的广告资源&#xff0c;云衔科技提供了全面的广告开户及代运营服务&#xff0c;帮助企业轻松驾驭数字化营销之路。…

c语言指针3

文章目录 前言一、数组名的理解1.数组名正常情况是首元素的地址2.数组名不是首元素地址的情况2. 1 sizeof(arr)中的数组名2. 2 &arr中的arr代表整个数组 3. 结论 二、使用指针访问数组1.使用指针输入输出数组中的数 三、一维数组传参的本质四、冒泡排序五、二级指针5.1 二级…

betterZip免费版怎么下载 如何安装下载和激活BetterZip教程 BetterZip注册码密钥

BetterZip是一款功能齐全且对用户友好的Mac系统解压缩工具&#xff0c;它具备压缩文件及文件夹&#xff0c;解压压缩包&#xff0c;在线预览和编辑压缩包内文件等一系列功能。此外&#xff0c;BetterZip还有简洁的界面和操作&#xff0c;可以通过拖拽或右键菜单来压缩或解压文件…