当前位置:   article > 正文

vue+elementui--下拉框中的数据量太大,可以进行懒加载处理_element ui下拉框选项如何懒加载

element ui下拉框选项如何懒加载
  1. 下拉框代码
    1. <el-form-item label="资源" prop="resourceId">
    2. <el-select
    3. v-model="form.resourceId"
    4. filterable
    5. placeholder="请选择"
    6. clearable
    7. :popper-append-to-body="false"
    8. v-el-select-loadmore="loadmore" // 这个是懒加载需要加的
    9. :filter-method="searchResource"
    10. @change="changeResourceId"
    11. style="width:100%" >
    12. <el-option
    13. v-for="item in workOption"
    14. :key="item.resourceId"
    15. :label="item.resourceName"
    16. :value="item.resourceId">
    17. </el-option>
    18. </el-select>
    19. </el-form-item>

  2. js部门的初期化处理
    1. export default{
    2. name: "",
    3. directives: {
    4. 'el-select-loadmore':{
    5. bind(el, binding){
    6. const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
    7. SELECTWRAP_DOM.addEventListener('scroll', function(){
    8. /**
    9. * scrollHeight 获取元素内容高度(只读)
    10. * scrollTop 获取或者设置元素的偏移值,常用于计算滚动条的位置,当一个元素的容器没有产生垂直方向的滚动条,那它的scrollTop值默认为0
    11. * clientHeight 获取元素的可见高度(只读)
    12. * 如果元素滚动到底,下面的等式返回true,没有则返回false
    13. *
    14. **/
    15. const condition = (this.scrollHeight - this.scrollTop) <= (this.clientHeight+10);
    16. if(condition){
    17. binding.value();
    18. }
    19. })
    20. }
    21. }
    22. },
    23. data(){
    24. selectWorkParams: {
    25. pageNum: 1, // 设置当前页数
    26. pageSize: 200, // 设置一页显示多少条数据
    27. resourcesType: null, // 设置其他的查询条件
    28. resourceName: null // 设置其他的查询条件
    29. },
    30. resourceTotal: 0,
    31. selectResourceName: null,
    32. workOption:[],
    33. }

  3. js部分逻辑处理
    1. searchResource(val){
    2. this.selectResourceName = val;
    3. this.workOption = new Array();
    4. this.selectWorkParams.pageSize = 200;
    5. this.selectWorkParams.pageNum = 1;
    6. // 资源名称
    7. this.selectWorkParams.resourceName = val;
    8. // 资源类型
    9. this.selectWorkParams.resourcesType = this.form.resourcesType;
    10. getResourceTypeList(this.selectWorkParams).then(response => {
    11. this.resourceTotal = response.rows.length;
    12. if(this.workOption.length > 0){
    13. this.workOption = this.workOption.concat(response.rows);
    14. }else{
    15. this.workOption = response.rows;
    16. }
    17. });
    18. },
    19. loadmore(){
    20. if(this.resourceTotal === 200){
    21. this.selectWorkParams.pageNum++;
    22. this.searchLoadResource(this.selectResourceName);
    23. }
    24. },
    25. searchLoadResource(val){
    26. // 资源名称
    27. this.selectWorkParams.resourceName = val;
    28. // 资源类型
    29. this.selectWorkParams.resourcesType = this.form.resourcesType;
    30. getResourceTypeList(this.selectWorkParams).then(response => {
    31. this.resourceTotal = response.rows.length;
    32. if(this.workOption.length > 0){
    33. var pushFlg = '';
    34. // 这个循环是因为下拉框滚动条的时候,有时会揍两遍方法,导致数据重复添加
    35. // 循环中的判断是为了不让数据重复添加
    36. for(var i =0; i < this.workOption.length; i++){
    37. if(this.workOption.findIndex(item => item.resourceId === response.rows[i].resourceId) < 0){
    38. pushFlg = 'push';
    39. break;
    40. }
    41. }
    42. if(pushFlg === 'push'){
    43. this.workOption = this.workOption.concat(response.rows);
    44. }
    45. }else{
    46. this.workOption = response.rows;
    47. }
    48. });
    49. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/114810
推荐阅读
相关标签
  

闽ICP备14008679号