el-select數(shù)據(jù)過多懶加載的解決(loadmore)
el-select數(shù)據(jù)過多處理方式
在日常項(xiàng)目中el-select組件的使用頻率是非常之高的. 當(dāng)數(shù)據(jù)過多時(shí)渲染時(shí)間非常長, 這里提供幾個(gè)處理方式.
遠(yuǎn)程搜索
組件提供了遠(yuǎn)程搜索方式, 也就是按照你輸入的結(jié)果匹配選項(xiàng).
下拉懶加載loadMore
下拉懶加載, 當(dāng)select滾動(dòng)到底部時(shí), 你再去請求一部分?jǐn)?shù)據(jù), 加入到當(dāng)前數(shù)據(jù)中.
某組件中:
<template>
<el-select
v-model="value"
placeholder="請選擇"
filterable
multiple
v-el-select-loadmore="loadmore"
>
<el-option
v-for="item in options"
:key="item.id"
:label="item.label"
:value="item.id">
</el-option>
</el-select>
</template>
export default {
directives: {
'el-select-loadmore': {
bind(el, binding) {
// 獲取element-ui定義好的scroll盒子
const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
SELECTWRAP_DOM.addEventListener('scroll', function () {
/**
* scrollHeight 獲取元素內(nèi)容高度(只讀)
* scrollTop 獲取或者設(shè)置元素的偏移值,常用于, 計(jì)算滾動(dòng)條的位置, 當(dāng)一個(gè)元素的容器沒有產(chǎn)生垂直方向的滾動(dòng)條, 那它的scrollTop的值默認(rèn)為0.
* clientHeight 讀取元素的可見高度(只讀)
* 如果元素滾動(dòng)到底, 下面等式返回true, 沒有則返回false:
* ele.scrollHeight - ele.scrollTop === ele.clientHeight;
*/
const condition = this.scrollHeight - this.scrollTop <= this.clientHeight;
if (condition) {
binding.value();
}
});
}
}
},
data() {
return {
value: '',
options: [],
formData: {
pageIndex: 1,
pageSize: 20,
}
};
},
mounted() {
this.getList(this.formData);
},
methods: {
loadmore() {
this.formData.pageIndex++;
this.getList(this.formData);
},
getList(formData) {
// 這里是接口請求數(shù)據(jù), 帶分頁條件
const _res = [1, 2, 3]; // 請求得到的數(shù)據(jù)
this.options = [...this.options, ..._res];
}
}
};
這樣就做到了滾動(dòng)懶加載, 具體細(xì)節(jié)在應(yīng)用時(shí)修改.
問題
這樣渲染問題解決了, 隨之會(huì)出現(xiàn)一個(gè)問題, 就是當(dāng)你的value為選中的數(shù)據(jù)后, 分頁數(shù)大的數(shù)據(jù).
當(dāng)頁數(shù)小時(shí), options數(shù)據(jù)中沒有當(dāng)前value的那一個(gè), value就會(huì)顯示為得到的id.
當(dāng)你選中后你要保存下來當(dāng)前的id以及l(fā)able, 下次過來時(shí), 帶入當(dāng)前組件, 手動(dòng)放在options中,這樣就解決了這個(gè)問題.
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS過濾url參數(shù)特殊字符的實(shí)現(xiàn)方法
本篇文章主要是對JS過濾url參數(shù)特殊字符的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12
JS中innerHTML和pasteHTML的區(qū)別實(shí)例分析
這篇文章主要介紹了JS中innerHTML和pasteHTML的區(qū)別,結(jié)合實(shí)例形式較為詳細(xì)的分析了innerHTML和pasteHTML的具體功能與使用區(qū)別,需要的朋友可以參考下2016-06-06
JSON數(shù)據(jù)中存在單個(gè)轉(zhuǎn)義字符“\”的處理方法
這篇文章主要介紹了JSON數(shù)據(jù)中存在單個(gè)轉(zhuǎn)義字符“\”的處理方法,在這里反斜杠(又稱右斜杠"\"),還表示轉(zhuǎn)義字符,字符串中不能成單出現(xiàn)。具體內(nèi)容詳情大家跟隨腳本之家小編一起看看吧2018-07-07
js實(shí)現(xiàn)鼠標(biāo)左右移動(dòng),圖片也跟著移動(dòng)效果
本文主要介紹了js實(shí)現(xiàn)鼠標(biāo)左右移動(dòng),圖片也跟著移動(dòng)效果的方法與思路。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
Javascript實(shí)時(shí)柱狀圖實(shí)現(xiàn)代碼
js實(shí)現(xiàn)的實(shí)時(shí)柱狀圖,非常有創(chuàng)意的想法。2008-10-10
localStorage實(shí)現(xiàn)便簽小程序
這篇文章主要為大家詳細(xì)介紹了localStorage實(shí)現(xiàn)便簽小程序的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11

