el-select數(shù)據(jù)過(guò)多處理方式
在日常項(xiàng)目中el-select組件的使用頻率是非常之高的. 當(dāng)數(shù)據(jù)過(guò)多時(shí)渲染時(shí)間非常長(zhǎng), 這里提供幾個(gè)處理方式.
遠(yuǎn)程搜索
組件提供了遠(yuǎn)程搜索方式, 也就是按照你輸入的結(jié)果匹配選項(xiàng).
下拉懶加載loadMore
下拉懶加載, 當(dāng)select滾動(dòng)到底部時(shí), 你再去請(qǐng)求一部分?jǐn)?shù)據(jù), 加入到當(dāng)前數(shù)據(jù)中.
某組件中:
<template> <el-select v-model="value" placeholder="請(qǐng)選擇" 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è)元素的容器沒(méi)有產(chǎn)生垂直方向的滾動(dòng)條, 那它的scrollTop的值默認(rèn)為0. * clientHeight 讀取元素的可見高度(只讀) * 如果元素滾動(dòng)到底, 下面等式返回true, 沒(méi)有則返回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) { // 這里是接口請(qǐng)求數(shù)據(jù), 帶分頁(yè)條件 const _res = [1, 2, 3]; // 請(qǐng)求得到的數(shù)據(jù) this.options = [...this.options, ..._res]; } }};這樣就做到了滾動(dòng)懶加載, 具體細(xì)節(jié)在應(yīng)用時(shí)修改.
問(wèn)題
這樣渲染問(wèn)題解決了, 隨之會(huì)出現(xiàn)一個(gè)問(wèn)題, 就是當(dāng)你的value為選中的數(shù)據(jù)后, 分頁(yè)數(shù)大的數(shù)據(jù).
當(dāng)頁(yè)數(shù)小時(shí), options數(shù)據(jù)中沒(méi)有當(dāng)前value的那一個(gè), value就會(huì)顯示為得到的id.
當(dāng)你選中后你要保存下來(lái)當(dāng)前的id以及l(fā)able, 下次過(guò)來(lái)時(shí), 帶入當(dāng)前組件, 手動(dòng)放在options中,這樣就解決了這個(gè)問(wèn)題.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。
新聞熱點(diǎn)
疑難解答