基于elementUi,下拉分页组件封装

news/2024/7/10 2:38:22 标签: vue, elementui, 前端, 组件化

文章目录

      • 一、说明
      • 二、组件封装
        • 1、组件 `PaginationSelect.vue` 代码
        • 2、属性
        • 3、事件/方法
      • 三、组件引入、使用
        • 注意:

一、说明

​ 虽然elementUi提供了丰富的组件,但是有些业务场景下,需要自己再封装适合自己的业务的组件,例如:支持分页、过滤、远程搜索的下拉组件。组件效果如下:

在这里插入图片描述

二、组件封装

vue__12">1、组件 PaginationSelect.vue 代码

vue"><template>
  <el-select v-model="childSelectedValue"
             :filterable="remote"
             :loading="loading"
             :remote="remote"
             :size="size"
             :remote-method="remoteMethod"
             :clearable="clearable"
             @change="handleChange"
             @clear="handleClear"
             @focus="handleFocus"
             :placeholder="placeholder">
    <el-option
      v-for="item in optionSource"
      :key="item[valueKey]"
      :label="item[labelKey]"
      :value="item[valueKey]">
    </el-option>

    <el-pagination
      small
      layout="prev, pager, next"
      @current-change="changeNumber"
      :hide-on-single-page="true"
      :page-size="paginationOption.pageSize"
      :current-page="paginationOption.currentPage"
      :pager-count="paginationOption.pagerCount"
      :total="paginationOption.total">
    </el-pagination>
  </el-select>
</template>

<script>

export default {
  name: 'PaginationSelect',
  props: {
    //此参数只是为了父组件实现 v-model指令接受参数用,子组件中无实际意义
    // 在子组件中通过监听childSelectedValue值,来触发 input 事件,实现子父组件数据绑定
    value:{
      type:String,
      default: ''
    },
    valueKey:{//传入的option数组中,要作为最终选择项的键值名称
      type:String
    },
    labelKey:{//传入的option数组中,要作为显示项的键值名称
      type:String
    },
    clearable	:{//是否支持清除,默认支持
      type:Boolean,
      default:true
    },
    remote:{//是否支持远程搜索,默认支持
      type:Boolean,
      default:false
    },
    size:{//组件尺寸,配置项同select  String | medium/small/mini
      type:String,
      default:'medium'
    },
    loading:{//远程数据加载状态显示
      type:Boolean,
      default:false
    },
    placeholder	:{
      type:String,
      default:'请选择'
    },
    optionSource:{//下拉框组件数据源
      type:Array,
      required:true
    },
    paginationOption:{//分页配置项
      type:Object,
      default:function () {
          return {
              pageSize:6,//每页显示条数  6条刚好
              currentPage:1,//当前页
              pagerCount:5,//按钮数,超过时会折叠
              total:5 //总条数
          }
      }
    }
  },
  data () {
    return {
      childSelectedValue:this.value,
    }
  },
  watch:{
    //监听子组件中选择的值得变化,每当选择一个项后,触发input事件,
    // 将子组件中选择的值通过input事件传递给父组件,实现父组件中v-model绑定的值的双向绑定
    childSelectedValue(val){
      this.$emit("input",val);
    },
    value(val){
      if(val!=null && val.length<1){
          this.childSelectedValue = '';
      }
    }
  },
  mounted(){
  },
  methods:{
    changeNumber(val){//子组件分页器,页码选择事件,父组件中监听子组件的 pageNationChange 事件,获取当前页码
      this.$emit("pageNationChange",val);
    },
    remoteMethod(val){ // 远程调用方法,在父组件中实现远程方法
      if(val!=null && val.length>0){
        //只有输入的字符串长度大于1时,触发
        this.$emit("remote-method",val);
      }else{
        this.childSelectedValue = ' '
      }
    },
    handleChange(val){
      //使组件支持change事件
      this.$emit("change",val);
    },
    handleClear(val){
      //使组件支持clear事件
      this.$emit("clear",val);
    },
    handleFocus(){
      //解决远程搜索无结果时,显示清除按钮问题
      if(this.childSelectedValue.length<1){
        this.childSelectedValue = ''
      }
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>

2、属性

参数说明类型可选值默认值
value在子组件中,通过v-model绑定的值String-‘ ’
labelKeyoptionSource数据源中,要作为下拉项名称的键值(key)String--
valueKeyoptionSource数据源中,要作为下拉项选择后的值的键值(key)String--
clearable可清除选择内容boolean-true
remote是否支持远程搜索boolean-false
size组件尺寸(同select组件)Stringmedium/small/minimedium
loading远程数据加载状态显示boolean-true
placeholder提示文字String-请选择
optionSource下拉组件的数据源(类型为数组)Array-[]
paginationOption分页配置项Object-{ pageSize:6, currentPage:1, pagerCount:5, total:5 }

3、事件/方法

事件名称说明回调参数
pageNationChange分页组件页码改变时触发改变后的页码
remote-method远程搜索,只有remote为true时,有效输入的值
change选项发生变化时触发目前的选中值
clear使组件支持clear事件-

三、组件引入、使用

引入

//在其他 .vue组件中引入(路径根据实际情况修改)
import PaginationSelect from "@/.....components/PaginationSelect"

使用

//在组件的components处声明名称
export default {
        components: {
            PaginationSelect
        },
        data() {
            return {
                //测试数据源
                cabinateOptions:[
                    {guid:'655445fdf5455545dfd',cabinetname:'测试名称1'},
                    {guid:'dfeg445fdf545554dfu',cabinetname:'测试名称2'},
                    ......
                ],
                //测试对象,接收组件值
                queryParam:{
                    cabinetGuid:''
                }
            }
        }
    ......
}
<pagination-select
     :optionSource="cabinateOptions"
     v-model="queryParam.cabinetGuid"
     labelKey="cabinetname"
     valueKey="guid"
     >
</pagination-select>

如上,可以根据自己需要,来使用组件的其他属性、方法,比如在clear/change 等事件中,做一些其他的事。

注意:

​ 1、如果开启 remote=“true” 选项后,组件支持远程搜索,此时下拉组件后面上下箭头的图标被隐藏了。


http://www.niftyadmin.cn/n/1618371.html

相关文章

快捷键布线报错_pads操作技巧

a.PADS2007中文教程1111----PADS2007_教程&#xff0d;PADS Logic.pdf 2222----PADS2007_教程&#xff0d;PADS Layout.pdf 3333----PADS2007_教程&#xff0d;PADS Router.pdf 4444----PADS2007_教程&#xff0d;高级封装设计.pdf1、PAGE UP/PAGE DOWN为视图的放大与缩小//111…

milp的matlab的案例代码_《MATLAB R2016a神经网络设计与应用28个案例分析》随书代码...

【实例简介】目录 第1章线性神经网络的工程应用 1.1系统辨识的MATLAB实现 1.2自适应系统辨识的MATLAB实现 1.3线性系统预测的MATLAB实现 1.4线性神经网络用于消噪处理的MATLAB实现 第2章神经网络预测的实例分析 2.1地震预报的MATLAB实现 2.1.1概述 2.1.2地震预报的MATLAB实例分…

nginx多级代理

文章目录一、实验步骤1、docker config创建3台nginx配置文件2、集群node节点打标签3、docker-compose编排文件4、在manager节点创建目录5、部署服务6、访问测试总结&#xff1a;测试环境说明&#xff1a;基于docker来测试。 3台centos7虚拟机&#xff0c;已搭建docker swarm集群…

autohold有什么弊端吗_刹车踏板为什么比油门踏板高?

相信很多老司机都发现了车辆的刹车踏板和油门踏板高度不一样&#xff0c;刹车踏板往往高于油门踏板。驾驶员在踩油门的时候脚掌没法平移过来踩刹车&#xff0c;而是需要抬高脚掌才可以&#xff0c;那么你知道这是为什么吗&#xff1f;刹车踏板为什么比油门踏板高&#xff1f;原…

申报成功后怎样修改_市政公用工程资质新办标准解读,申报成功后可以承接哪些工程...

市政公用工程总承包资质属于建筑总包资质&#xff0c;包含很多种类的建筑工程施工&#xff0c;如城市道路、给排水工程、管道工程、地下交通工程等等&#xff0c;这些工程都是基本的城市建设工程&#xff0c;也就是说想要承包此类工程的企业&#xff0c;必须要有市政公用工程资…

windows下,查看端口占用情况

说明&#xff1a; 在Windows环境下&#xff0c;用netstat命令查看某个端口号是否占用&#xff0c;为哪个进程所占用。netstat [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]#参数意义:-a 显示所有连接和侦听端口-b 显示在创建每个连接或侦听端口时涉及的…

小马哥spring编程核心思想_《Spring Boot编程思想(核心篇)》小马哥著 PDF电子书下载...

版权声明1. 本站文章和资源均来自互联网收集和整理&#xff0c;本站不承担任何责任及版权问题。2. 相关版权归作者及其公司所有&#xff0c;仅供学习研究用途&#xff0c;请勿用于商业目的。3. 请于下载后24小时内删除&#xff0c;如果喜欢此资源&#xff0c;请购买正版。4. 若…

电压源和电流的关联参考方向_什么是受控电电流源,电压源

受控电源(非独立源) 定义 电压或电流的大小和方向不是给定的时间函数&#xff0c;而是受电路中某处的电压(或电流)控制的电源&#xff0c;称为受控电源。 受控电源又称“非独立电源”。一种具有两个支路的四端元件。其中一条支路是电压源或电流源&#xff0c;另一支路则开路或短…