el-table表头如何添加筛选功能

6 篇文章 0 订阅

el-table表头添加筛选功能

效果图:
first-image
second-image

思路:使用vue的render函数自定义渲染

上代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <!-- 引入样式 -->
  <link rel="stylesheet" href="https://unpkg.com/element-ui@2.14.1/lib/theme-chalk/index.css">
  <!-- 字体 -->
  <link rel="stylesheet" href="https://unpkg.com/browse/element-ui@2.14.1/lib/theme-chalk/fonts/element-icons.ttf">
  <link rel="stylesheet"
    href="https://https://unpkg.com/browse/element-ui@2.14.1/lib/theme-chalk/fonts/element-icons.woff">
  <style>
    /* 自定义样式部分 */
    .el-table th,
    .el-table tr {
      background: #1D2643;
      color: #ccc
    }
    .el-table--enable-row-hover .el-table__body tr:hover>td{
      background: #343C56;
    }
    .el-table td,
    .el-table th.is-leaf {
      border-color: transparent
    }
  </style>

</head>

<body>
  <div id="example">
    <el-table :data="testData" style="width:40%;margin:0 auto">
      <el-table-column prop="name" label="源文件"></el-table-column>
      <el-table-column prop="status" :render-header="renderHeader"></el-table-column>
    </el-table>
  </div>
  <!-- 引入vue文件 -->
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <!-- 引入组件库 -->
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  <script>
    const tempObj = {
      options: [{
        label: '所有状态',
        value: '2'
      }, {
        label: '未完成',
        value: '0'
      }, {
        label: '已完成',
        value: '1'
      }],
      colorMap: ['#dd4b39', '#00ff00', '#00a1d6'],
      dataMap: ['未完成', '已完成', '所有状态']
    }
    const app = new Vue({
      el: "#example",
      data() {
        return {
          value: '2',
          label: '所有状态',
          /**这里可以改成其他数据
           * 
           * 比如,从ajax取到的数据
           * **/
          // testData:[],
          testData: [{
            id: 1,
            name: '1.txt',
            status: '已完成'
          }, {
            id: 2,
            name: '2.txt',
            status: '未完成'
          }]
        }


      },
      // mounted() {
      //   this.timer()
      // },
      methods: {
        // timer() {
        // let This = this
        //   $.ajax({
        //     type: 'GET',
        //     url: 'xxxxx',
        //     success(data) {
        //       let json = data
        //       This.testData = json.data
        //       console.log(json)
        //     }

        //   })
        // },
        renderHeader(h, column) {
          let This = this
          let arr = []
          tempObj.options.map((i) => {
            arr.push(h('el-option', {
              domProps: {
                value: i.value
              },
              nativeOn: {
                click: This.handleState
              },
              style: {
                color: tempObj.colorMap[i.value]
              }
            }, i.label))
          })
          return h('div', [
            h('el-select', {
              attrs: {
                value: This.label,
              }
            }, arr)
          ])

        },
        handleState(event) {
          this.value = event.target.value
          this.label = tempObj.dataMap[this.value]
          alert("切换至" + this.label)
        }
      }
    })
  </script>
</body>

</html>
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
el-tableElement UI中的一个表格组件,它提供了丰富的功能和灵活的配置选项。在el-table中,可以通过自定义表头筛选来实现对表格数据的筛选功能。 要实现el-table表头的自定义筛选,可以按照以下步骤进行操作: 1. 首先,在el-table表头中定义一个自定义筛选组件。可以使用slot-scope来获取表头的数据和方法。例如: ```html <el-table :data="tableData"> <el-table-column prop="name" label="姓名"> <template slot="header" slot-scope="scope"> <custom-filter :column="scope.column"></custom-filter> </template> </el-table-column> <!-- 其他列 --> </el-table> ``` 2. 在自定义筛选组件中,可以使用el-input、el-select等Element UI提供的组件来实现具体的筛选功能。同时,需要监听筛选条件的变化,并触发表格数据的重新筛选。例如: ```html <template> <div> <el-input v-model="filterValue" placeholder="请输入筛选条件"></el-input> <el-button @click="handleFilter">筛选</el-button> </div> </template> <script> export default { props: ['column'], data() { return { filterValue: '' }; }, methods: { handleFilter() { // 根据筛选条件对表格数据进行筛选 this.$emit('filter-change', this.filterValue); } } }; </script> ``` 3. 在父组件中,监听自定义筛选组件的filter-change事件,并根据筛选条件对表格数据进行筛选。例如: ```html <el-table :data="tableData"> <el-table-column prop="name" label="姓名"> <template slot="header" slot-scope="scope"> <custom-filter :column="scope.column" @filter-change="handleFilterChange"></custom-filter> </template> </el-table-column> <!-- 其他列 --> </el-table> ``` ```javascript methods: { handleFilterChange(value) { // 根据筛选条件对表格数据进行筛选 this.tableData = this.tableData.filter(item => item.name.includes(value)); } } ``` 这样,就可以实现el-table表头的自定义筛选功能了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值