el-table/elementui 表格组件实现每一列的筛选(两种方法)

6 篇文章 0 订阅
2 篇文章 0 订阅

大家好呀,珊妹儿最近更新的有点慢了,是因为最近疏于学习,工作也是没接触到一些新的技术,但近期由于工作使用了el-table组件,需求又有个列的筛选,鉴于项目前期使用的jqGrid,大家都知道,这个插件想要实现列的筛选很容易,因为它自己封装好了,直接可以用,但是我们的新功能使用了vue,所以选择了el-table。

        大家应该都知道官网上的筛选,只提供了类似下拉框多选的筛选,如果这一列是日期的话,我们希望是筛选的时候选择的是日期呢,又或者是input框呢?下面看下图就明白了:

 text类型----需要用el-input

date类型----需要用el-date-picker

select类型---需要用el-select

方法一:

珊妹儿我是这样做的,首先在定义表格列的时候定义每一列的类型(例如type="input"),表格里无非就是三种类型:input,date,select,然后根据官网提供了个方法:render-header,这个里面可以自己定义显示什么,代码如下:

renderHeader(h, { column, $index }) 
      const coltype = column.type;
      if (coltype == "select") {
        return [
          column.label,
          h(
            "el-select",
            {
              on: {
                input: (value) => {
                  //这个是下拉框的事件
                    this.$set(this.filterinput, column.property, value);
                },
              },
              props: { //这里是el-select的属性
                value: this.filterinput[column.property], //文字框的内容取决于这个value,如果value不存在,会报错
                clearable: true,
              },
            },
            [
              columndata.options.map((item) => { //columndata这个是自己的全局
                return h("el-option", {
                  props: {
                    value: item.value,
                    label: item.label,
                  },
                });
              }),
            ]
          ),
        ];
      } else if (coltype == "date") {
        return [
          column.label,
          h("el-date-picker", {
            on: {
              input: (value) => {
                //随着下拉框的不同,文字框里的内容在边
                this.$set(this.filterinput, column.property, value);
              },
            },
            props: {
              value: this.filterinput[column.property],
              clearable: true,
              format: "yyyyMMdd",
              "value-format": "yyyy/MM/dd",
              type: "daterange",
              "range-separator": "至",
              "start-placeholder": "开始日期",
              "end-placeholder": "结束日期",
            },
          }),
        ];
      } else {
        return [
          column.label,
          h("el-input", {
            on: {
              input: (value) => {
                //这个是input每次改变值的事件
                this.$set(this.filterinput, column.property, value);
              },
              change: () => {
                //这个是input改变值后enter事件
                this.onFilterChange();
              },
            },
            props: {
              value: this.filterinput[column.property],
              placeholder: "请输入",
              clearable: true,
            },
          }),
        ];
      }
    },

方法二:

使用方法一的时候,浏览器下面会提示建议使用scoped-slot,方法二就是使用scoped-slot实现,但是目前珊妹遇到个问题,就是如果表格的列信息是动态的,循环出来的列,那么表头也会是动态渲染的,这就导致获取到的每个表头筛选的内容并没有getter/setter属性,会导致粘贴不到表头筛选框中,el-input的输入也不会及时响应,如果有大佬可以解决这个问题,还望提供解决方案

具体代码如下:

<el-table-column
        v-for="(column, index) in columns"
        :key="column.name"
        :prop="column.prop"
        :label="column.label"
        :show-overflow-tooltip="true"
        scoped-slot
      >
      <template slot="header">
          <span>{{column.label}}</span>
          <el-select
            v-if="column.type == 'select'"
            placeholder="请选择"
            clearable
            v-model="filterinput[column.prop]"
            @change="handleTableColumnInputChange()"
          >
            <el-option
              v-for="item in column.options"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
           <el-date-picker
            v-else-if="column.type == 'date'"
            type="daterange"
            v-model="filterinput[column.prop]"
            style="width: 100%"
            placeholder="选择日期"
            format="yyyy/MM/dd"
            value-format="yyyy/MM/dd"
            clearable
            range-separator= "至"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            @change="handleTableColumnInputChange()"
          >
          </el-date-picker>
          <el-input
            v-else-if="column.type == 'input'"
            size="small"
            clearable
            @change="handleTableColumnInputChange()"
            v-model="filterinput[column.prop]"
          ></el-input>
      </template>
        <template slot-scope="scope">
            <span>{{scope.row[column.prop]}}</span>
        </template>
      </el-table-column>

重点注意!!!!!:定义列的时候记得一定要定义个type属性,属性值就是input/date/select

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Vue2.0和ElementUI2.0中使用el-table表格组件时,自适应高度可以通过以下步骤来实现: 1. 确定数据源 首先,我们需要确定用于填充表格的数据源。在el-table中,数据通常以数组的形式传递,其中每个数组元素代表表格中的一行数据。 2. 计算表格高度 在Vue中,我们可以使用计算属性来动态计算表格的高度。计算属性会根据数据源的变化自动更新表格高度。例如,我们可以使用下面的代码来计算表格高度: computed: { tableHeight: function() { // 获取窗口可见区域高度 var viewportHeight = window.innerHeight; // 计算表格头和分页组件的高度 var tableHeaderHeight = this.$refs.table.$el.querySelector('.el-table__header-wrapper').offsetHeight; var paginationHeight = this.$refs.pagination.$el.offsetHeight; // 计算表格内容区域的高度 var contentHeight = viewportHeight - tableHeaderHeight - paginationHeight - 20; return contentHeight; } } 在上面的代码中,我们首先获取窗口可见区域的高度,然后根据表格头和分页组件的高度计算表格内容区域的高度。最后,将计算出的高度返回。 3. 绑定表格高度 我们将计算属性中计算出的表格高度绑定到el-table组件中的height属性上,以实现自适应高度。例如,我们可以使用下面的代码将表格高度绑定到el-table组件上: <el-table :data="tableData" ref="table" :height="tableHeight"> 在上面的代码中,我们首先使用data属性传递数据源,然后使用ref属性给el-table组件添加一个引用,最后使用height属性将计算属性中计算出的表格高度绑定到组件上。 通过上述方法,我们可以在Vue2.0和ElementUI2.0中实现自适应高度的el-table表格组件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值