vue——el-select实现懒加载带搜索功能


主题思路

1.自定义v-el-select-lazyloading指令
2.页面el-select中使用v-el-select-lazyloading和filterValue
3.使用细节


一、自定义v-el-select-lazyloading指令

可以在全局main.js文件中定义,可全局使用

代码如下(示例):

Vue.directive('el-select-lazyloading', {
  bind(el, binding) {
    let SELECT_DOM = el.querySelector(
      ".el-select-dropdown .el-select-dropdown__wrap"
    );
    SELECT_DOM.addEventListener("scroll", function () {
      let condition =
        this.scrollHeight - this.scrollTop <= this.clientHeight;
      if (condition) {
        binding.value();
      }
    });
  }
})

二、页面el-select中使用v-el-select-lazyloading和filterValue

代码如下(示例):

<template>
  <div>
    <el-select
      filterable
      :filter-method="filterValue"
      v-model="id"
      @change="selectChange"
      clearable
      v-el-select-lazyloading="lazyloading"
    >
      <el-option
        v-for="item in List"
        :key="item.id"
        :label="item.name"
        :value="item.id"
      >
      </el-option>
    </el-select>
  </div>
</template>

<script>
import {
  getListing //获取列表数据的接口
} from "@/api/api.js";
export default {
  name: "",
  data() {
    return {
      id: "",
      List: [],
      queryParams: {
        page: 1, //页码
        perPage: 10, //每页数量
        name: "" //搜索输入
      }
    };
  },
  methods: {
    //获取列表数据
    getList() {
      getListing(this.queryParams).then(res => {
        if (res.code == 200) {
          this.List = JSON.parse(
            JSON.stringify([...this.List, ...res.content.data])
          );
        }
      });
    },
    //下拉框懒加载
    lazyloading() {
      this.queryParams.page++;
      this.getList();
    },
    //下拉框搜索
    filterValue(value) {
      this.List = [];
      this.queryParams.page = 1;
      this.queryParams.name = value;
      this.getList();
    }
  }
};
</script>
<style lang="scss" scoped>
</style>

三、使用细节

使用该自定义v-el-select-lazyloading指令时,必须保持页面比例为100%,否则自定义懒加载无效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值