1.0.5 • Published 1 year ago

scroll-el-select v1.0.5

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

el-select 下拉滚动加载

npm i scroll-el-select
yarn add scroll-el-select

使用

以下示例全部支持下拉加载

示例:远程搜索

<template>
  <select-scroll
    :value="form.id"
    :length="list.length"
    :pageCur="params.pageNum"
    :pageSize="params.pageSize"
    :loading="loading"
    :total="total"
    @handle="handle"
  >
    <el-option
      v-for="item in list"
      :key="item.id"
      :label="item.name"
      :value="item.id"
    >
    </el-option>
  </select-scroll>
</template>

<script>
import SelectScroll from "scroll-el-select";
import _ from "lodash";
export default {
  components: {
    SelectScroll: SelectScroll,
  },
  data() {
    return {
      form: {
        id: "",
      },
      params: {
        pageNum: 1,
        pageSize: 10,
      },
      loading: false, // 可以没有,不会有loading效果
      total: 0,
      list: [],
    };
  },
  methods: {
    handle(event) {
      switch (event.type) {
        case "search":
          this.list = [];
          this.params.pageNum = 1;
          this.getList();
          break;
        case "getList":
          this.params.pageNum = this.params.pageNum + 1;
          this.getList();
          break;
        case "change":
          this.form.id = event.data;
          break;
        default:
        // 支持事件:["focus", "visible-change", "remove-tag", "clear", "blur"];
      }
    },
    getList: _.debounce(function () {
      this.loading = true;
      fetch(`/list?${qs.stringify(this.params)}`)
        .then((res) => res.json())
        .then((res) => {
          if (res && Array.isArray(res.rows)) {
            this.total = res.total;
            this.list.push(...res.rows);
          } else {
            throw new Error();
          }
        })
        .catch(() => {
          let pageNum = this.params.pageNum - 1;
          this.params.pageNum = pageNum < 1 ? 1 : pageNum;
        })
        .finally(() => {
          this.loading = false;
        });
    }),
  },
};
</script>

API SelectScroll

props

属性说明类型默认值
value默认选中的数据, 6位数字或者地区中文数组String, Number, Array-
disabledScroll禁用下拉加载Booleanfalse
disabled设置为禁止选择状态Booleanfalse
placeholder占位符String请选择
clearable是否可以清空选项Booleantrue
filterable是否可搜索Booleantrue
remote是否为远程搜索Booleanfalse
total数据总条数Number0
length当前已加载的数据条数Number0
pageCur当前页码Number1
pageSize每页显示的数据条数Number10
loading是否显示加载动画Booleanfalse
multiple是否允许多选Booleanfalse
size输入框尺寸String-
collapseTags多选时是否将选中值按文字的形式展示Booleanfalse
multipleLimit多选时用户最多可以选择的项目数,为 0 则不限制Number0
nameselect input 的 name 属性String0
autocompleteselect input 的 autocomplete 属性Stringoff
noMatchText搜索条件无匹配时显示的文字,也可以使用slot="empty"设置String无匹配数据
noDataText选项为空时显示的文字,也可以使用slot="empty"设置String无数据
popperClassSelect 下拉框的类名String-
reserveKeyword多选且可搜索时,是否在选中一个选项后保留当前的搜索关键词Booleanfalse
defaultFirstOption在输入框按下回车,选择第一个匹配项。需配合 filterable 或 remote 使用Booleanfalse
automaticDropdown对于不可搜索的 Select,是否在输入框获得焦点后自动弹出选项菜单Booleanfalse
popperAppendToBody是否将弹出框插入至 body 元素。在弹出框的定位出现问题时,可将该属性设置为 falseBooleantrue

events

事件名说明返回值返回值参数说明
handle操作事件Objece{ type, data }详见下表

handle回调type

事件名说明
search搜索事件
getList分页事件
change选中值发生变化时触发
focus当 input 获得焦点时触发
visible-change下拉框出现/隐藏时触发
remove-tag多选模式下移除tag时触发
clear可清空的单选模式下用户点击清空按钮时触发
blur当 input 失去焦点时触发

环境

1.0.0

{
  "dependencies": {
    "element-ui": "^2.15.12",
    "lodash": "^4.17.21",
    "vue": "^2.7.7"
  }
}