参考于官网(https://element.eleme.cn/#/zh-CN/component/select)及博客(https://blog.51cto.com/u_15127634/4027669

前置:vue脚手架搭建出来的项目(此方法适用于下拉选择单选,多选的情况下,会每获取焦点一次则会请求一次)

  1. 在main.js写一个自定义指令
/* 自定义指令复选框下拉加载更多 使用 el-select-loadmore*/
Vue.directive('selectLoadmore', {
  bind(el, binding) {
    // 获取element-ui定义好的scroll盒子
    const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
    SELECTWRAP_DOM.addEventListener('scroll', function () {
      /**
      * scrollHeight 获取元素内容高度(只读)
      * scrollTop 获取或者设置元素的偏移值,常用于, 计算滚动条的位置, 当一个元素的容器没有产生垂直方向的滚动条, 那它的scrollTop的值默认为0.
      * clientHeight 读取元素的可见高度(只读)
      * 如果元素滚动到底, 下面等式返回true, 没有则返回false:
      * ele.scrollHeight - ele.scrollTop === ele.clientHeight;
      */
      const condition = this.scrollHeight - this.scrollTop <= this.clientHeight;
      if (condition) {
        binding.value();
      }
    });
  }
})
  1. 页面使用指令,添加远程搜索属性和方法
    注意点:官网中提到启用远程搜索,需要将filterable和remote设置为true,同时传入一个remote-method。remote-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。需要注意的是,如果el-option是通过v-for指令渲染出来的,此时需要为el-option添加key属性,且其值需具有唯一性,比如此例中的item.value。
    在这里插入图片描述
<!-- @focus 解决搜索失去焦点之后,数据不会重置的问题 -->
<el-select size="mini"  v-model="interestsOptionsId" filterable clearable placeholder="请选择"
 @focus="remoteMethod('')" remote 
reserve-keyword :loading="interesLoading"  :remote-method="remoteMethod"  v-select-loadmore="interestsLoadmore" >
        <el-option  v-for="item in interestsOptions" :key="item.id" :label="item.name" :value="item.id"> </el-option>
 </el-select>
  1. 我在项目中使用的是mixins方法混入,在src下新建一个文件夹命名为mixins,在此文件夹下新建一个js文件,命名为interests.js,代码如下:
// 引入封装好的请求接口
import {  Interface } from "@/api/interestsRights";
let interests = {
    data() {
        return {
            interestsOptions: [], //  接口返回数据
            interesLoading:false,
            formData: {
                page: 1,
                size: 100,
                last_pageIndex: 0,
                
            },
            searchEquity:{
                equity_name:"",
                provider_id:[]
            },
        }
    },
    created() { },
    methods: {
         // 远程搜索
    	remoteMethod(query) {
        	console.log(query,8888)
        	this.searchEquity.equity_name = query;
        	this.formData.page  = 1;
        	this.interestsOptions = [];
          	this.interesLoading = true;
          	this.managementListOption(); // 请求接口
      	},
        interestsLoadmore(){
            setTimeout(() => {
                this.formData.page = this.formData.page + 1;
                if (this.formData.last_pageIndex < this.formData.page) {
                    this.formData.page = this.formData.last_pageIndex
                    return;
                }
                this.managementListOption();
            }, 1000);
        },
        managementListOption() {
            // 这里是接口请求数据, 带分页条件
            Interface(this.formData.page,this.formData.size,"",this.searchEquity).then((res) => {
                // console.log(res,777);
                this.interesLoading = false
                this.formData.last_pageIndex = res.data.last_page;
                this.interestsOptions = [...this.interestsOptions, ...res.data.data];
            });
        },
    }
}

export default interests;
  1. 页面中混入mixins,代码如下:
import interests from "@/mixins/interests"; // 引入mixins方法
export default {
  name: "Management",
  mixins: [interests],
  data() {
    return { };
  },
  created() {},
  methods: {},
};

效果如如下:
在这里插入图片描述

在这里插入图片描述

Logo

前往低代码交流专区

更多推荐