datav-实现轮播表,使用updateRows方法-无缝衔接加载数据

前言

  • 最近在做大屏需求的时候,遇到一个轮播数据的需求,查看datav文档发现确实有这个组件

  • 但这个组件只提供了一次加载轮播的例子,虽然提供了轮播加载数据updateRows方法

  • 但是文档并没有触发事件,比如轮播完数据触发事件,加载完数据事件-这些都没有说明

  • 关键时我们要解决谁来判断数据轮播完了,来触发这个事件,请求接口,加载第二页数据

视频

datav-轮播表无缝衔接数据

须知

1.为什么要边滚动边加载数据
  • 直接把后端所有数据请求之后直接轮播-确实比较省事。但是这样做法不符合

  • 先不说浏览器受不受得了,就一个真实设备报警可能就有7,8条,数据会越来越多

  • 作为一个合理cv工程师,我们还是要避免这种事,不到万不得已还是不要这样干

2.直接往config.data里面push数据不就行了-不合理
  • 如果我们直接往config.data里面push数据,数据确实进去了,但是轮播表的数据没有更新

  • 轮播的还是原来的数据,如果我们把config.data重新赋值一遍,轮播数据确实改变了

  • 但他有从头开始轮播,没有无缝衔接。并且是我们手动按钮触发,不符合需求,不建议

3.使用定时器计算时间加载数据-推荐
  • 本来想在网上找一下有没有轮播完的事件直接用,找了一圈一言难尽,自己写了一个

  • 注意一:我们不能直接写定时器来写代码逻辑,因为修改定时器间隔后,定时器不会变

  • 注意二:因为默认就显示了五个,所以有两种情况,第一次,第二次....代码有注释

  • 注意三:因为我们是用定时器来判断加载数据,所以要把鼠标悬停停止播放关掉

代码实现-子父组件形式-可复制-看注释

父组件
<template><div class="app-container"><el-card class="box-card"><div class="cont-top"><div class="con-title">测试<el-button @click="doUpdate" type="success" size="mini">替换数据滚动列表是否更新数据测试</el-button></div></div><div class="cont-bottom"><DatavTable ref="DatavTable" /></div></el-card></div>
</template>
​
<script>
// datav-轮播表
import DatavTable from './components/DatavTable.vue'
export default {name: 'Purejs',components: {DatavTable},methods: {// datav-轮播表添加数据doUpdate () {this.$refs.DatavTable.ceshi()}}
}
</script>
​
<style lang="scss" scoped>
.app-container {::v-deep .box-card {width: 32%;height: 328px;margin: 0 2% 1% 0;&:nth-child(3n) {margin-right: 0;}
​.el-card__body {height: 100%;padding: 0;display: flex;flex-direction: column;// align-items: center;.cont-top {height: 50px;.con-title {line-height: 50px;padding-left: 10px;font-size: 16px;// font-family: PingFang SC-Bold, PingFang SC;font-weight: 700;border-bottom: 1px solid #f4f4f4;}}.cont-bottom {flex: 1;padding: 10px;}.PieDevicetype {background: rgba(2, 29, 159, 0.7);}}}
}
</style>
子组件-DatavTable.vue
<template><div id="DatavTable"><dv-scroll-board:config="config"ref="scrollBoard"style="width:100%;height:100%"/></div>
</template>
​
<script>
export default {name: 'DatavTable',data () {return {// 配置config: {// 标头header: ['列1', '列2', '列3'],// 数据data: [],// 是否开启序号index: true,// 宽度-按照顺序-不写就是平均分配columnWidth: [50],// 居中方式align: ['center', 'center', 'center', 'center'],// 滚动时间-每条waitTime: 3500,// 序号别名indexHeader: '排名'},// 定时器加载数据time: null,// datav数据刷新间隔datavNumber: 5,// datav下标datavIndex: 15,// 追加数据addlist: [],// 禁止鼠标悬浮暂停hoverPause: false}},created () {// 模拟调接口-等待data-html加载完毕-不然取不到数据会报错this.$nextTick(() => {this.doUpdate()})},methods: {// 测试方法-测试直接往config.data添加数据时,轮播表数据是否会刷新ceshi () {this.config.data.push(['行', '行1', '行1列3'],['行', '行2', '行2列3'],['行', '行3', '行3列3'],['行', '行4', '行4列3'],['行', '行5', '行5列3'],['行', '行6', '行6列3'],['行', '行7', '行7列3'],['行', '行8', '行8列3'],['行', '行9', '行9列3'],['行', '行1', '行10列3'])// 解决办法-1// 重新new一个对象-轮播数据确实更新了,// 缺点-没有衔接滚动,又从1开始滚动// this.config = { ...this.config }console.log('this.config.data', this.config.data)},doUpdate () {if (this.addlist.length < 10) {console.log('第一次')// 调用第一次接口赋值数据-模拟this.config.data = [['行1列1', '行1列2', '行1列3'],['行2列1', '行2列2', '行2列3'],['行3列1', '行3列2', '行3列3'],['行4列1', '行4列2', '行4列3'],['行5列1', '行5列2', '行5列3'],['行6列1', '行6列2', '行6列3'],['行7列1', '行7列2', '行7列3'],['行8列1', '行8列2', '行8列3'],['行9列1', '行9列2', '行9列3'],['行10列1', '行10列2', '行10列3']]// 记录数据-this.addlist = [['行1列1', '行1列2', '行1列3'],['行2列1', '行2列2', '行2列3'],['行3列1', '行3列2', '行3列3'],['行4列1', '行4列2', '行4列3'],['行5列1', '行5列2', '行5列3'],['行6列1', '行6列2', '行6列3'],['行7列1', '行7列2', '行7列3'],['行8列1', '行8列2', '行8列3'],['行9列1', '行9列2', '行9列3'],['行10列1', '行10列2', '行10列3']]}//   开始判断加载数据console.log('this.config.data.length', this.config.data.length)console.log('this.config.data', this.config.data)console.log('this.addlist', this.addlist.length)
​// 第二次加载if (this.addlist.length > 10) {console.log('第二次执行')// 刷新时间10次this.datavNumber = 10}
​// 先清空-在触发// 不这样写,修改时间间隔后,定时器时间间隔不会修改clearInterval(this.time)this.time = setInterval(this.datavloaddata, 3500 * this.datavNumber)},// datav-添加数据方法datavloaddata () {// 页码加一console.log('执行调接口-第二次')let a = [['行', '行1', '行1列3'],['行', '行2', '行2列3'],['行', '行3', '行3列3'],['行', '行4', '行4列3'],['行', '行5', '行5列3'],['行', '行6', '行6列3'],['行', '行7', '行7列3'],['行', '行8', '行8列3'],['行', '行9', '行9列3'],['行', '行1', '行10列3']]// 模拟调接口赋值数据-res.data - 轮播数据this.addlist = [...this.addlist, ...a]
​// 数据保存一份-没有什么作用// this.config.data = this.addlist
​// 开始轮播数据下标-建议传// 不传也可以-不会影响太大// 传的话就是添加数据开始每次数据长度-15 因为一屏可以显示5个,// 或者是第一次是5 每次加10 - 比较麻烦let c = this.addlist.length - this.datavIndexconsole.log('this.addlist.length', this.addlist.length)console.log('this.datavIndex', this.datavIndex)console.log('c', c)
​// 解决方法二-使用updateRows()方法追加数据// 优点-无限追加数据-无缝衔接// 缺点-不能直接使用,需要代码触发(比如定时器)这个方法相当于一个缓存,并不会直接把数据更新到config里面// 就更element-table表格选中道理一样,必须先渲染数据表格,才能通过方法选中(直接写死是选中不了-可能没有标记)// this.$refs['scrollBoard'].updateRows(this.addlist,c)this.$refs['scrollBoard'].updateRows(this.addlist)
​// 配置数据-上面赋值了就会变,不赋值是不会变(因为updateRows()方法-不会修改config里面数据)console.log('this.config.data', this.config.data)// 执行下一次this.doUpdate()}},beforeDestroy () {// 在页面销毁后,清除计时器clearInterval(this.time)}
}
</script>
​
<style lang="scss" scoped>
#DatavTable {width: 100%;height: 100%;
}
</style>

总结:

经过这一趟流程下来相信你也对 datav-实现轮播表,使用updateRows方法-无缝衔接加载数据 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

有什么不足的地方请大家指出谢谢 -- 風过无痕

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

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

相关文章

ESL电子标签的真相:电子墨水屏没墨水?

一说到电子墨水屏 你大概率会想到Kindle 如果你问是不是墨水做的 那这篇文章你就得好好看看了 在我们日常与客户的沟通中 为数不多却出乎意料地有好几个以下对话↓ 在此辟谣 电子墨水屏里确实 没 有 墨 水 那它是什么样的原理&#xff1f;为什么越来越多显示设备采用&…

Win11在Virtualbox上安装ubuntu操作系统

注&#xff1a;原创笔记&#xff0c;以下图片水印为本人 相关工具展示 第四个&#xff1a;ubuntu的vmdk文件&#xff0c;用于配置虚拟机 第5/6个&#xff1a;virtualbox安装包 一、安装 VirtualBox 由于win11版本问题&#xff0c;如果装不了 virtualBox需要在官网安装最新版…

新零售模式:跨境电商如何实现线上线下融合?

随着数字时代的发展&#xff0c;新零售模式逐渐崭露头角&#xff0c;成为跨境电商发展的重要趋势。线上线下融合不仅拓宽了销售渠道&#xff0c;更提供了更丰富、更便捷的购物体验。 本文将深入探讨新零售模式在跨境电商中的应用&#xff0c;以及如何实现线上线下融合&#xf…

前后端请求之nginx配置

问题&#xff1a; 前端发送的请求&#xff0c;是如何请求到后端服务器的&#xff1f; 如&#xff0c;前端请求地址&#xff1a;http://loclhost/api/employee/login&#xff1a; 后端相应请求地址&#xff1a;http://loclhost:8080/admin/employee/login 回答&#xff1a; …

使用MfgTool烧写前需准备的文件

一. 简介 本文我们就来学习&#xff0c;如何将我们编译的 uboot&#xff0c;zImage&#xff08;内核镜像&#xff09;&#xff0c;xxx.dtb设备树文件&#xff0c;还有制作的根文件系统&#xff0c;这四个文件烧写到开发板中&#xff0c;最后 开发板能正常启动。 本文这里使用…

【日志技术】附Logback入门教程

文章目录 日志概论日志的体系Logback快速入门日志配置文件配置日志级别 日志概论 什么是日志&#xff1f;其实可以通过下面几个问题来了解的。 系统系统能记住某些数据被谁操作&#xff0c;比如被谁删除了&#xff1f;想分析用户浏览系统的具体情况&#xff0c;比如挖掘用户的…

一个简单的Python自动化测试 logging 日志模块,为何会难住一个工作6年的测试?

写Python程序的时候&#xff0c; 我们经常需要写日志&#xff0c; 以便调试程序&#xff0c;发现问题&#xff0c;以及查看程序的运行状态。 Python自带了logging模块&#xff0c;可以将日志保存到.txt文件中&#xff0c; 也可以输入到界面上。 我们希望日志有一定的格式, 比…

【C语言】【数据结构】自定义类型:结构体

引言 这是一篇对结构体的详细介绍&#xff0c;这篇文章对结构体声明、结构体的自引用、结构体的初始化、结构体的内存分布和对齐规则、库函数offsetof、以及进行内存对齐的原因、如何修改默认对齐数、结构体传参进行介绍和说明。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&am…

【学习笔记】LLM for Education

ChatGPT has entered the classroom: how LLMs could transform education 前言IntroductionThe risks are realEmbracing LLMsIntroducing the AI tutorAugmenting retrievalWill it catch on?总结 前言 一篇来自Nature的文章&#xff0c;探讨了教育行业的不同参与者&#x…

webSRc实现浏览器播放rtsp【海康】

先上代码 <template><div>video的配置自己写<video id"video" autoplay width"900" height"900"></video></div> </template><script> export default {name: index1,data() {return {webRtcServer: …

WampServer本地部署结合内网穿透实现公网访问本地服务

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

在做题中学习(31):电话号码的字母组合(全排列)

17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;既然要排列组合&#xff0c;就得先根据数字字符取出来 所以先定义一个string类的数组通过下标取到每个数字对应的映射。 string _numsTostr[10]{"","","abc"…

gitee对接使用

1.创建一个文件夹 2.进入Gitee接受对方项目编辑 3.打开终端初始化一开始创建的文件夹 git init 3.1打开终端 3.2输入git.init 4.克隆对方的项目 4.1进入Gitee复制对方项目的路径 4.2在编辑器终端内克隆对方项目 git clone 网址 如此你的编辑器就会出现对方的项目 …

小红书AI文章写作工具,免费的小红书AI写作工具有哪些

社交媒体已经成为人们交流、分享生活和获取信息的主要平台之一。而在这众多社交媒体中&#xff0c;小红书以其独特的社区氛围和内容特色而备受瞩目。如何更高效地进行小红书文章创作&#xff0c;本文将深入研究小红书文章AI写作工具。 小红书文章AI写作工具背后的技术 随着人工…

Java基于Rest Assured自动化测试接口详解

前言 不知道大家的项目是否都有对接口API进行自动化测试&#xff0c;反正像我们这种小公司是没有的。由于最近一直被吐槽项目质量糟糕&#xff0c;只能研发自己看看有什么接口测试方案。那么在本文中&#xff0c;我将探索如何使用 Rest Assured 自动化 API 测试&#xff0c;Re…

基于Java SSM框架实现宠物医院信息管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现宠物医院信息管理系统演示 java简介 Java语言是在二十世纪末由Sun公司发布的&#xff0c;而且公开源代码&#xff0c;这一优点吸引了许多世界各地优秀的编程爱好者&#xff0c;也使得他们开发出当时一款又一款经典好玩的小游戏。Java语言是纯面向对象语言…

关于加密解密,加签验签那些事

面对MD5、SHA、DES、AES、RSA等等这些名词你是否有很多问号&#xff1f;这些名词都是什么&#xff1f;还有什么公钥加密、私钥解密、私钥加签、公钥验签。这些都什么鬼&#xff1f;或许在你日常工作没有听说过这些名词&#xff0c;但是一旦你要设计一个对外访问的接口&#xff…

聚焦中国—东盟大健康产业峰会 点靓广西“长寿福地”品牌

12月8-10日2023中国—东盟大健康产业峰会暨大健康产业博览会在南宁国际会展中心成功举办&#xff0c;本次峰会由国家中医药管理局、广西壮族自治区人民政府联合主办&#xff0c;中国老年学和老年医学学会、自治区党委宣传部、自治区民政厅、广西壮族自治区外事办公室、广西壮族…

MySQL使用窗口函数ROW_NUMBER()、DENSE_RANK()查询每组第一名或每组前几名,窗口函数使用详解

MySQL数据表结构 创建 tbl_class_info 表&#xff0c;表中有四个字段 id、username、score、group_name 使用 ROW_NUMBER()、DENSE_RANK() 查询每组前三名 -- 查询每组前3名 SELECT username, score, group_name FROM ( SELECT username, score, group_name, ROW_NUMBER()…

目标检测——R-FCN算法解读

论文&#xff1a;R-FCN: Object Detection via Region-based Fully Convolutional Networks 作者&#xff1a;Jifeng Dai, Yi Li, Kaiming He and Jian Sun 链接&#xff1a;https://arxiv.org/pdf/1605.06409v2.pdf 代码&#xff1a;https://github.com/daijifeng001/r-fcn 文…