巧妙解決element-ui下拉框選項過多的問題


1. 場景描述

不知道你有沒有這樣的經歷,下拉框的選項很多,上萬個選項甚至更多,這個時候如果全部把數據放到下拉框中渲染出來,瀏覽器會卡死,體驗會特別不好

用人會說element-ui的select有一個remote-method,支持遠程搜索,我們讓服務端支持一下不就可以了,當然這是一種解決的方案。但是有時候這種方法有時候不一定適用

  (1)有時候服務端數據是經過計算返回給我們的,可能返回不是特別快,體驗不是很好

  (2)有時候數據可能只有幾千條,全部渲染又不太合適,一直掉接口不是特別好

  (3)僅僅通過前端能不能解決,如果能解決,豈不是減輕了服務端的工作和壓力

 

2.解決辦法

   提示:element-ui的select有一個fildter-method方法,我們可以通過這個方法來進行過濾下拉項

  假設我們有個下拉框是用來選擇用戶的

<el-select
  v-model="userId"
  filterable
  :filter-method="userFilter"
  clearable>
  <el-option
    v-for="item in userList"
    :key="item.userId"
    :label="item.username"
    :value="item.userId"
  ></el-option>
</el-select>
userFilter(query = '') {
  let arr = this.allUserList.filter((item) => {
    return item.username.includes(query) || item.userId.includes(query)
  })
  if (arr.length > 50) {
    this.userList = arr.slice(0, 50)
  } else {
    this.userList = arr
  }
},
getUserWhiteList() {
  HttpRequest.post("/api/admin/community/getUserWhiteList").then(
    response => {
      this.allUserList = response.data.list;
      this.userFilter()
    }
  );
},

如上所示,我們從后台獲取用戶列表,經過我們自己的過濾,我們每次只渲染50條數據,無論有多少數據,對我們來說也支持一個變量,占個內存。當然數據越多,數組的遍歷也會相應的慢,但是這個影響不大。

我們不僅能過濾名字,還可以對我們制定的任一項進行過濾

優化:上面的代碼我們還可以適當優化下,只有發現了數組長度超過了50項,我們就停止遍歷

3.效果圖

如上圖所示,我的用戶數據大概是2萬條,可以看出響應的特別快。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM