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

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

vue實現滾動加載的表格

瀏覽:21日期: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久久,三上悠亚国产精品一区二区三区
91一区二区三区四区| 在线亚洲欧美| 欧美日一区二区在线观看| 久久99久久久精品欧美| 国产日韩亚洲| 国产亚洲毛片在线| 日本一区二区免费高清| 欧美日本精品| 亚洲免费网址| 99久久精品费精品国产| 亚洲三级毛片| 国产欧美69| 亚洲人成网77777色在线播放| 美女精品在线观看| 日韩和欧美一区二区三区| 亚洲一区二区日韩| 国产精品精品| 国产日韩欧美中文在线| 久久永久免费| 欧美日韩1区| 国产精品一国产精品k频道56| 日本午夜精品| 国产亚洲观看| 精品国产一区二区三区av片| 三级欧美在线一区| 久久最新视频| 中文精品视频| 91亚洲自偷观看高清| 人人精品亚洲| 日韩在线观看| 亚洲午夜在线| 亚洲综合日韩| 伊人精品一区| 免费黄色成人| 久久狠狠久久| 欧美亚洲tv| 国产精品羞羞答答在线观看| 国产一区二区三区久久| 国内一区二区三区| 麻豆网站免费在线观看| 中文在线资源| 亚洲高清激情| 欧美在线看片| 久久香蕉网站| 激情91久久| 日韩激情精品| 国产福利亚洲| 久久不卡日韩美女| 亚洲理论在线| 国产精品日韩| 天堂а√在线最新版中文在线| av高清不卡| 亚洲一二av| 日韩一区三区| 国产成人精品一区二区三区视频 | 成人日韩在线| 欧美精品黄色| 热久久国产精品| 国产精品成人**免费视频 | 精品视频91| 亚洲aⅴ网站| 亚洲欧美日韩国产一区二区| 欧美日中文字幕| 日韩三级久久| 亚洲第一精品影视| 一本色道精品久久一区二区三区| 国产精品xxxav免费视频| 亚洲精品高潮| 亚洲综合激情在线| 美腿丝袜亚洲一区| av免费不卡国产观看| 亚洲狼人精品一区二区三区| 久久国产欧美日韩精品| 国产极品模特精品一二| 久久丁香四色| 日韩精品一卡| 久久中文字幕av一区二区不卡| 日本强好片久久久久久aaa| 九色porny丨国产首页在线| 美日韩一区二区三区| 国产剧情一区二区在线观看| 久久av电影| 欧美日韩国产综合网| 久色成人在线| 欧美aⅴ一区二区三区视频| 在线天堂中文资源最新版| 老牛国内精品亚洲成av人片| 欧美在线影院| 国产在线日韩| 欧美一区二区三区激情视频 | 亚洲毛片视频| 国产偷自视频区视频一区二区| 国产一区成人| 日韩黄色av| 日韩精品欧美| 福利一区和二区| 国产精品xvideos88| 日本国产欧美| 久久精品国产99国产精品| 久久中文亚洲字幕| 欧美jjzz| 激情综合网站| 精品国产黄a∨片高清在线| 欧美特黄一区| 国产精品v亚洲精品v日韩精品| 日韩中文字幕一区二区三区| 激情不卡一区二区三区视频在线| 欧美国产不卡| 久久在线电影| 亚洲精品成a人ⅴ香蕉片| 日韩国产精品久久久| 麻豆国产91在线播放| 免费一级欧美片在线观看网站| 国产激情欧美| 一本大道色婷婷在线| 久久国产人妖系列| 91欧美日韩| 日韩不卡一二三区| 激情婷婷综合| 麻豆视频在线观看免费网站黄 | 国产精品久久久久久久久免费高清| 四虎在线精品| 一区免费在线| 欧美aa一级| 蜜臀久久99精品久久一区二区| 日韩亚洲在线| 欧美综合社区国产| 日韩精品1区| 免费看久久久| 蜜臀av一区二区三区| 欧美日韩色图| 伊人久久大香线蕉av不卡| 国产精品极品在线观看| 韩国久久久久久| 久久高清免费| 久久久久久婷| 国产精品成人3p一区二区三区| 日韩久久一区| 日韩专区视频网站| 亚洲精品乱码久久久久久蜜桃麻豆 | 麻豆国产91在线播放| 国产麻豆综合| 亚洲手机视频| 中文字幕中文字幕精品| 久久免费国产| 亚洲一本视频| 99精品在线| 午夜亚洲精品| 91免费精品国偷自产在线在线| 成人在线超碰| 精品精品99| 欧美+日本+国产+在线a∨观看| 精品欧美日韩精品| 国产麻豆综合| 精品国产一区二区三区2021| 国产成人精品一区二区三区视频| 国产精品天堂蜜av在线播放| 国产精品最新| 久久99精品久久久野外观看| 国产美女亚洲精品7777 | 老牛影视一区二区三区| 久久国产高清| 国产精品香蕉| 国产精品第一| 蜜臀精品久久久久久蜜臀| 一区二区三区国产在线| 中文字幕日本一区二区| 日韩欧美激情电影| 欧美日韩视频| 日韩影片在线观看| 亚洲三级网站| 日韩av一区二区在线影视| 精品精品国产三级a∨在线| 国产福利片在线观看| 色婷婷久久久| 日韩在线电影| 国产精品久久亚洲不卡| 精品国产亚洲一区二区在线观看| 麻豆精品久久| 香蕉国产精品| 综合一区在线| 日本精品久久| 视频福利一区| 伊人精品视频| 欧美精品国产一区| 国产美女精品| 久久av网站| 日产午夜精品一线二线三线| 欧美在线资源| 在线手机中文字幕| 国产精品一区二区精品视频观看| 国产成人久久| 综合日韩在线| 精品欧美一区二区三区在线观看| 国产精品美女久久久| 欧美日一区二区在线观看| 国产乱人伦丫前精品视频| 亚洲午夜91| 91午夜精品| 亚洲一区二区三区高清不卡|