日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue實現滾動加載的表格

瀏覽:23日期:2022-09-29 09:42:35
目錄實現效果滾動加載知識儲備組件封裝1. 組件命名2. 提供的props3.使用舉例組件封裝總結1.盡可能地使用computed計算屬性2.給表格提供插槽另一種滾動加載數據的實現實現效果

vue實現滾動加載的表格

碼云地址

滾動加載知識儲備

參考ant-design-vue中list滾動加載的思路,使用vue-infinite-scroll加上vue-virtual-scroller作為解決方案。

組件封裝

因為整個系統使用的框架是ant-dsign-vue,所以組件封裝的變量命名風格盡可能的與a-table保持一致。

1. 組件命名

XScrollTable.vue

2. 提供的props

必填字段:

dataSource -- 數據源

columns -- 表格展示的列信息,插槽用法和a-table不完全一樣,下面會提到。

itemSize -- 每行數據的高度

選填字段:

rowKey -- 數據主鍵標識,默認為’key’

height -- 表格展示區域的高度,默認為500

pageSize -- 表格滾動每次滾動加載的數據量,默認為30

infiniteScrollDistance -- 表格觸發加載的距離條件,默認為10

rowSelection -- 表格多選配置,已處理的屬性有selectedRowKeys、onChange、width。默認為null,不展示多選。

3.使用舉例

首先初始化10000條數據,放在表格中進行顯示。

let data = new Array(10000).fill(1);data = data.map((item1, index) => { let item = {}; item.id = index; item.age = '姓名'; item.address = '地址'; return item;});export default data;

注意:這里之所以加了fill(1),是因為通過Array構造函數產生的數據全是empty,沒有數組索引,無法進行map循環。

加載表格

<x-scroll-table row-key='id':itemSize='22':rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,width:50}':columns='columns':dataSource='data'> <template slot='action' slot-scope='{record,text}'><a @click='handleDetail(record)'>詳情</a> </template></x-scroll-table>組件封裝總結1.盡可能地使用computed計算屬性

雖然只是簡單地封裝了表格,但還是需要定義了很多的屬性,使用計算屬性代替在data里定義變量,可以減少變量的維護工作量。

整個組件只定義了一個page變量,其它都是使用計算屬性的方式。

data() { return { // 當前展示頁數 page: 1, }; },

舉個栗子:

通過page屬性定義一個計算屬性來表示當前已經加載的數據量

// 展示的最大下標數量,存在比總數據條數多的情況,使用slice解決這個問題 lastIndex() { return this.pageSize * this.page; },

通過這個計算屬性同時衍生出其他的計算屬性

// 表示表格數據是否已經加載完畢 busy() { return this.lastIndex >= this.dataSource.length; }, // 當前已經加載到RecycleScroller滾動組件的數據 tableData() { return this.dataSource.slice(0, this.lastIndex); },

通過一個page屬性衍生出一系列的計算屬性,我只需要維護page屬性,其他都是自動計算的。

2.給表格提供插槽

首先通過表格傳入的columns參數,計算出需要渲染的列,這里同樣使用計算屬性。

// 將列數組轉為列對象,將columnFieldKey值作為鍵,數組項作為值 columnMap() { return this.columns.reduce((returnValue, cur) => {returnValue[cur[columnFieldKey]] = cur;return returnValue; }, {}); }, // 取數組里的列鍵值--columnFieldKey columnKeys() { return this.columns .map(item => item[columnFieldKey]); },

在template中遍歷

<div v-for='(key) of columnKeys' :key='key' : > <slot v-if='izSlotRender(columnMap[key])':name='columnMap[key].scopedSlots.customRender':record='row':text='row[key]'> </slot> <span v-else :title='row[key]'>{{ renderItem(row, index, key) }}</span></div> // 是否使用插槽渲染 izSlotRender(item) { return item.scopedSlots && item.scopedSlots.customRender; },

如果在定義columns時傳入了scopedSlots和customRender,將使用插槽渲染。

但是這里存在和ant-design-vue中表格插槽渲染不一樣的地方。

我通過slot標簽定義的插槽,在父組件獲取插槽參數的時候,只能使用slot-scope='{record,text}'對象解構的方式。而ant-design-vue表格是可以直接使用slot-scope='record,text'獲取參數的。

另一種滾動加載數據的實現

table數據多的時候打開頁面會加載一會才顯示數據,這樣體驗不好,所以要做滾動加載數據

<el-table :data='materielList' height='250'><el-table-column prop='eventId' label='事件ID'> <template scope='scope'><label>{{eventMap[scope.row.eventId] == null ? ’--’: eventMap[scope.row.eventId].sn}}</label> </template></el-table-column><el-table-column prop='title' label='對應事件'> <template scope='scope'><label>{{eventMap[scope.row.eventId] == null ? ’--’: eventMap[scope.row.eventId].title}}</label> </template></el-table-column><el-table-column prop='age' label='負責人'> <template scope='scope'><label>{{eventMap == null || eventMap[scope.row.eventId] == null || eventMap[scope.row.eventId].personalInformation == null ? ’--’: eventMap[scope.row.eventId].personalInformation.name}}</label> </template></el-table-column><el-table-column prop='birthday' label='物料名稱'> <template scope='scope'><label>{{materirlName}}</label> </template></el-table-column><el-table-column prop='idcardNo' label='狀態'> <template scope='scope'><label>{{formatType(scope.row.type)}}</label> </template></el-table-column><el-table-column prop='relationship' label='數量'> <template scope='scope'><label>{{formatUseNum(scope.row.useNum)}}</label> </template></el-table-column><el-table-column prop='ethtic' label='使用時間'> <template scope='scope'><label>{{changeTime(scope.row.createOn)}}</label> </template></el-table-column> </el-table>

下面是js部分 

methods: { init (param) {let id = param.param && param.param.idif(id){this.start = 0 MaterialRecordService.query({param: {baseId: this.baseId, materialId: id},start: this.start,limit: 30}).then(rsp => {//初次請求數據,30條 this.start += 30 this.materielList = rsp.data MissionEventService.microList({ids: rsp.data.map(n => n.eventId)}).then(rsp3 => {this.eventMap = {}rsp3.data.forEach(n => (this.eventMap[n.id] = n)) }) })} }, onScroll() { let inner = document.querySelector(’.el-table__body-wrapper’); if(inner.scrollHeight - inner.scrollTop <= inner.clientHeight){//為true時證明已經到底,可以請求接口if(this.flag){//設一個滾動事件的開關,(在data里面聲明 flag: true)默認為true this.flag = false MaterialRecordService.query({param: {baseId: this.baseId, materialId: this.entity.id},start: this.start,limit:30}).then(rsp => {//每次加載30條 this.materielList = this.materielList.concat(rsp.data) this.start += 30 this.flag = true MissionEventService.microList({ids: rsp.data.map(n => n.eventId)}).then(rsp3 => { rsp3.data.forEach(n => (this.eventMap[n.id] = n)) }) }) } } }},mounted () { this.init({...this.param})<br>//監聽表格dom對象的滾動事件 document.querySelector(’.el-table__body-wrapper’).addEventListener(’scroll’, this.onScroll); }

在這里我要說明一下監聽的dom對象是哪一個

vue實現滾動加載的表格

我還要解釋下scrollHeight、scrollTop、clientHeight這三個屬性

vue實現滾動加載的表格

這是我截的別人的圖加了幾筆

scrollHeight:網頁正文全文高度,

scrollTop:網頁滾動的高度,

clientHeight:網頁可視區域的高度

以上就是vue實現滾動加載的表格的詳細內容,更多關于vue 滾動加載的表格的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
一区免费视频| 久久一区二区三区喷水| 香蕉久久国产| 日韩一区精品视频| 亚洲一区激情| 麻豆亚洲精品| 三级久久三级久久久| 久久国产精品色av免费看| 久久精品一区| 特黄特色欧美大片| 免费日韩av片| 国产欧美成人| 国产成人精品一区二区三区免费 | 国产亚洲高清一区| 日本不卡视频一二三区| 亚洲综合激情在线| 欧美日韩国产亚洲一区| 日韩亚洲国产欧美| 91成人精品观看| 首页国产欧美久久| 国产日韩免费| 成人三级高清视频在线看| 欧美特黄一级大片| 亚洲精品欧洲| 麻豆国产精品| 亚洲成人av观看| 蜜桃一区二区三区在线观看| 97se亚洲| 精品久久久网| 日韩一区二区三区免费| 亚洲一区网站| 精品72久久久久中文字幕| 国产va免费精品观看精品视频| 亚洲乱亚洲高清| 日韩精品一区二区三区中文字幕| 国产精品地址| 亚洲一级影院| 少妇高潮一区二区三区99| 国产精品精品国产一区二区| 国产亚洲一区在线| 久久永久免费| 在线免费观看亚洲| 国产 日韩 欧美 综合 一区| 中文亚洲免费| 日韩成人一级| 亚洲夜间福利| 久久av影视| 国产婷婷精品| 国产拍在线视频| 91亚洲精品在看在线观看高清| 日韩国产激情| 91福利精品在线观看| 在线成人直播| 中文字幕高清在线播放| 日韩一区精品| 黄色成人91| 正在播放日韩精品| 奇米狠狠一区二区三区| 欧美在线亚洲| 国产精品3区| 色综合视频一区二区三区日韩 | 米奇777超碰欧美日韩亚洲| 亚洲永久精品唐人导航网址| 日韩电影免费在线观看| 日韩av一区二区三区| 在线国产一区二区| 精品国产午夜肉伦伦影院| 日韩国产在线观看一区| 蜜臀91精品国产高清在线观看| 国产精品网站在线看| 丝袜亚洲另类欧美| 久久高清精品| 国产欧美亚洲一区| 精品美女在线视频| 精品国产中文字幕第一页| 国产亚洲观看| 不卡一区综合视频| 久久网站免费观看| 亚洲一级高清| 91视频久久| 精品亚洲精品| 六月丁香综合在线视频| 欧美精品三级在线| 欧美日本三区| 久久午夜精品| 蜜桃一区二区三区| 99久久精品国产亚洲精品| 日韩一区三区| 久久精品国语| 蜜桃国内精品久久久久软件9| 国产精品xx| 亚洲精华国产欧美| 日本亚洲欧洲无免费码在线| 精品视频国产| 欧美一区激情| 欧美一区在线观看视频| 国产一卡不卡| 久久精品不卡| 成人在线视频中文字幕| 欧美一区二区三区久久精品| 蜜臀av一区二区在线免费观看| 日韩精品一级中文字幕精品视频免费观看 | 麻豆成人在线观看| 国产精品7m凸凹视频分类| 国产精品av一区二区| 国产精品婷婷| 少妇高潮一区二区三区99| 亚洲一区二区毛片| japanese国产精品| 国产精品色网| 一区二区三区四区日韩| 日韩欧美美女在线观看| 日韩欧美中文字幕在线视频| 国产一区二区三区日韩精品| 伊人久久视频| 亚洲一级影院| 蜜桃视频免费观看一区| 日韩在线网址| 亚洲综合中文| 久久不见久久见中文字幕免费 | 亚洲欧美在线综合| 日韩av网站在线观看| 欧美一区91| 国际精品欧美精品| 九九精品调教| 三级一区在线视频先锋| 清纯唯美亚洲综合一区| 精品国产三区在线| av亚洲在线观看| 日韩av黄色在线| 日韩a一区二区| 91久久久久| 国产精品极品国产中出| 伊人久久在线| 中文一区一区三区免费在线观| 日韩精品一区二区三区中文字幕| 久久一区精品| 一区二区视频欧美| 国产日韩一区二区三区在线 | 欧美日韩四区| 日本特黄久久久高潮| 国产夫妻在线| 午夜亚洲福利在线老司机| 欧美在线观看天堂一区二区三区| 国产精品国产一区| 久久国产88| 高清日韩中文字幕| 久久国产小视频| 国产美女精品视频免费播放软件| 视频二区不卡| 日韩欧美四区| 99久久亚洲精品| 99久久亚洲精品蜜臀| 精品久久久中文字幕| 国产精品av一区二区| 国产一区国产二区国产三区| 99国产精品久久久久久久成人热| 国产精品久久久一区二区| 最新日韩欧美| 桃色av一区二区| 久久久噜噜噜| 国产一区二区三区四区| 日本欧美不卡| 欧美自拍一区| 激情91久久| 六月婷婷综合| 国产免费av一区二区三区| 日韩视频一区二区三区在线播放免费观看| 国产日产高清欧美一区二区三区| 免费毛片在线不卡| 国产精品九九| 蜜桃av一区二区三区电影| 欧美香蕉视频| 亚洲成人免费| 老鸭窝一区二区久久精品| 亚洲精品精选| 在线视频观看日韩| 国产亚洲高清在线观看| 久久亚洲欧洲| 婷婷六月综合| 天堂av在线| 国产精品一线| 日韩中文字幕| 免费观看久久av| 精精国产xxxx视频在线野外| 国产精品美女午夜爽爽| 日韩精品高清不卡| 久久性天堂网| 亚洲国产成人精品女人| 日韩在线精品| 国产精品精品| 久久精品九色| 综合欧美亚洲| 亚洲欧美日韩综合国产aⅴ| 日韩欧美一区二区三区在线视频| 麻豆国产欧美日韩综合精品二区| 亚洲日本国产| 亚洲人成毛片在线播放女女| 136国产福利精品导航网址| 97国产精品|