Vue中el-select组件的二次封装:实现可分页的下拉框

804 阅读2分钟

在日常开发中,有时我们会遇到下拉框数据量大,需要分页加载的情况。而ElementUI的下拉框组件默认并未提供分页功能。本篇文章就将教你怎样二次封装el-select组件,实现可分页的下拉框。

一、引入组件库

我们首先需要引入相应的ElementUI的组件库。

import { Select, Option } from 'element-ui';

Vue.component(Select.name, Select);
Vue.component(Option.name, Option);

二、构建分页下拉框组件

接下来,我们需要创建一个名为"pageable-select"的Vue组件。首先,在你的组件库里新建一个"PageableSelect.vue"文件。在这个文件里,我们需要定义并初始化一些必要的data变量。

export default {
  data() {
    return {
      dataList: [],     // 存放下拉框数据
      pageSize: 10,     // 每一页的数据量
      pageNum: 1,       // 当前的页数
      total: 0,         // 总的数据量
    }
  },
}

之后,我们需要定义一个"getList"的方法,这个方法将用于从服务器端获取数据。

methods: {
  async getList() {
    const res = await fetch(`api/getList?pageNum=${this.pageNum}&pageSize=${this.pageSize}`);
    const data = await res.json();
    this.total = data.total;
    this.dataList = [...this.dataList, ...data.list]; // 关键点在于这里,我们使用的是追加的形式添加数据
  }
}

我们希望当滚动条滚动到底部时,自动加载下一页的数据。于是我们需要定义一个"scrollHandler"方法,并在下拉框的scroll事件中调用它。

methods: {
  scrollHandler(e) {
    const div = e.target;
    if (div.scrollTop + div.clientHeight >= div.scrollHeight) {
      if (this.dataList.length < this.total) {
        this.pageNum++;
        this.getList();
      }
    }
  }
}

接下来,我们需要在组件的created钩子中调用"getList"方法,获取第一页的数据。

created() {
  this.getList();
}

最后,我们需要定义组件的template部分,在template中我们使用el-select组件,并在其上绑定scroll事件。

<el-select v-model="value" @scroll="scrollHandler">
  <el-option
    v-for="item in dataList"
    :key="item.value"
    :label="item.label"
    :value="item.value">
  </el-option>
</el-select>

三、在页面中使用分页下拉框组件

现在,你的分页下拉框组件已经完成了,你可以在任何需要的地方使用它。

<pageable-select v-model="value"></pageable-select>

总结:

以上就是如何二次封装el-select组件来实现一个可分页的下拉框的全部内容。希望对你有所帮助。在实际开发中,你可能需要根据实际业务和接口进行适当的修改。但是核心思路都是类似的。