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.pswp.cn/news/214329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214329.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ESL電子標簽的真相:電子墨水屏沒墨水?

一說到電子墨水屏 你大概率會想到Kindle 如果你問是不是墨水做的 那這篇文章你就得好好看看了 在我們日常與客戶的溝通中 為數不多卻出乎意料地有好幾個以下對話↓ 在此辟謠 電子墨水屏里確實 沒 有 墨 水 那它是什么樣的原理&#xff1f;為什么越來越多顯示設備采用&…

Abp vNext在Docker部署并導出鏡像

Docker介紹 Docker 是一個開源的應用容器引擎&#xff0c;讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中&#xff0c;然后發布到任何流行的 Linux或Windows操作系統的機器上&#xff0c;也可以實現虛擬化。容器是完全使用沙箱機制&#xff0c;相互之間不會有任何…

深度剖析中國居民消費價格指數CPI數據可視化案例-Python可視化技術實現(附完整源碼)【數據可視化項目案例-16】

?????? 你的技術旅程將在這里啟航! ???? 本專欄包括所有的可視化技術學習,感興趣可以到本專欄頁面,查閱可視化寶典可快速了解本專欄。訂閱專欄用戶可以在每篇文章底部下載對應案例源碼以供大家深入的學習研究。 ?? 每一個案例都會提供完整代碼和詳細的講解,不論…

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; 也可以輸入到界面上。 我們希望日志有一定的格式, 比…

【性能優化】性能優化實戰

一、背景 在做code review的時候&#xff0c;經常會發現&#xff0c;因為開發習慣問題&#xff0c;很多研發人員喜歡在for循環中查詢數據庫。今天用一個真實例子&#xff0c;記錄一次查詢性能優化的例子 二、示例 代碼如下: classmethod fn_performance() def get_task_ins…

Linux常用調試工具gdb

程序編譯后&#xff0c;調試是十分重要的環節&#xff0c;如何更好更快的定位程序中的問題&#xff0c; 是加快程序開發進度的重要因素。Gdb 調試器是一款 GNU 開發組織并發布的 UNIX/Linux 下的程序調試工 具。GDB調試 編譯要點 對代碼進行編譯&#xff0c;注意一定要加上選項…

【C語言】【數據結構】自定義類型:結構體

引言 這是一篇對結構體的詳細介紹&#xff0c;這篇文章對結構體聲明、結構體的自引用、結構體的初始化、結構體的內存分布和對齊規則、庫函數offsetof、以及進行內存對齊的原因、如何修改默認對齊數、結構體傳參進行介紹和說明。 ? 豬巴戒&#xff1a;個人主頁? 所屬專欄&am…

Ubuntu——永久掛載/卸載硬盤

Ubuntu——永久掛載/卸載硬盤 一、掛載1. 查詢硬盤2. 格式化硬盤3. 掛載硬盤4. 開機自動掛載5. 查看掛載是否成功 二、取消掛載參考資料&#xff1a; 一、掛載 1. 查詢硬盤 sudo fdisk -l2. 格式化硬盤 # 格式化硬盤(/dev/sda)的文件系統&#xff0c;這里格式化為 ext4 系統…

面試經典150題(3-4)

leetcode 150道題 計劃花兩個月時候刷完&#xff0c;今天&#xff08;第二天&#xff09;完成了兩道(3-4)150&#xff1a; (26. 刪除有序數組中的重復項) 題目描述&#xff1a; 給你一個 非嚴格遞增排列 的數組 nums &#xff0c;請你 原地 刪除重復出現的元素&#xff0c;使…

C#生成Token字符串

Token字符串來保證數據安全性&#xff0c;如身份驗證、跨域訪問等。但是由于Token字符串的長度比較長&#xff0c;可能會占用過多的空間和帶寬資源&#xff0c;因此我們需要生成短的Token字符串 方法一&#xff1a;使用Base64編碼 Base64編碼是一種常用的編碼方式&#xff0c…

測試:接口參數測試

接口參數測試是接口測試中非常重要的一部分&#xff0c;主要是為了驗證接口在不同參數輸入下的行為和響應。下面詳細介紹一下接口參數測試的相關內容&#xff1a; 參數必填與非必填測試&#xff1a;需要測試接口對必填參數和非必填參數的處理。對于必填參數&#xff0c;不提供…

【學習筆記】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;是一組常用來…

ESP32-Web-Server編程-通過 Base64 編碼在網頁中插入圖片

ESP32-Web-Server編程-通過 Base64 編碼在網頁中插入圖片 概述 不同于上節 ESP32-Web-Server編程-在網頁中通過 src 直接插入圖片,本節引入 Base64 編碼來顯示圖片。 Base64 是一種用64個字符來編碼表示任意二進制數據的方法。任何符號都可以轉換成 Base64 字符集中的字符,…