el-table设置默认筛选

3,492 阅读1分钟

1.初始化设置默认筛选项

如element文档示例所示,默认会显示所有项,即没有做任何的筛选

Snipaste_2021-04-09_14-38-37.png 那么如何按默认的设置筛选,比如默认按‘家’筛选呢? Snipaste_2021-04-09_14-43-26.png 方法:设置filtered-value Snipaste_2021-04-09_14-47-39.png Snipaste_2021-04-09_15-55-52.png Snipaste_2021-04-09_15-58-31.png

2.当el-table数据更新,需要重新设置筛选条件,如何设置筛选呢?

这种情况我们发现如果数据更新,重新设置this.filteredVal=['公司'],并不起任何作用,还是会按原来设置的‘家’筛选 Snipaste_2021-04-09_15-03-52.png 此时点击更新数据按钮后应该这样做 Snipaste_2021-04-09_15-17-29.png 这样就设置成功了

Snipaste_2021-04-09_15-19-06.png

3.示例代码

 * @Author: your name
 * @Date: 2021-04-09 13:51:38
 * @LastEditTime: 2021-04-09 15:38:42
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \bdb06\src\views\taCheng\test.vue
-->
<template>
  <div class="app-container">
    <el-button @click="resetDateFilter">清除日期过滤器</el-button>
    <el-button @click="clearFilter">清除所有过滤器</el-button>
    <el-button @click="updateData">更新数据</el-button>
    <el-table ref="filterTable" :data="tableData" style="width: 100%">
      <el-table-column prop="date" label="日期" sortable width="180" column-key="date"
       :filters="[
       {text: '2016-05-01', value: '2016-05-01'}, 
       {text: '2016-05-02', value: '2016-05-02'},
       {text: '2016-05-03', value: '2016-05-03'}, 
       {text: '2016-05-04', value: '2016-05-04'}]"
       :filter-method="filterHandler">
      </el-table-column>
      <el-table-column prop="name" label="姓名" width="180">
      </el-table-column>
      <el-table-column prop="address" label="地址" :formatter="formatter">
      </el-table-column>
      <el-table-column prop="tag" label="标签" width="100" 
      :filters="[
      { text: '家', value: '家' }, 
      { text: '公司', value: '公司' }]" 
      :filter-method="filterTag" 
      :filtered-value="filteredVal" 
      filter-placement="bottom-end">
      <template slot-scope="scope"> 
        <el-tag :type="scope.row.tag === '家' ? 'primary' : 'success'" disable-transitions>{{scope.row.tag}}</el-tag>
      </template>
      </el-table-column>
    </el-table>
  </div>

</template>

<script>
export default {
  data() {
    return {
      tableData: [{
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄',
        tag: '家'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1517 弄',
        tag: '公司'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1519 弄',
        tag: '家'
      }, {
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1516 弄',
        tag: '公司'
      }],
      filteredVal: ['家']
    }
  },
  methods: {
    resetDateFilter() {
      this.$refs.filterTable.clearFilter('date');
    },
    clearFilter() {
      this.$refs.filterTable.clearFilter();
    },
    formatter(row, column) {
      return row.address;
    },
    filterTag(value, row) {
      return row.tag === value;
    },
    filterHandler(value, row, column) {
      const property = column['property'];
      return row[property] === value;
    },
    updateData() {
      this.tableData = [{
        date: '2016-05-02',
        name: '王小虎1',
        address: '上海市普陀区金沙江路 1518 弄',
        tag: '家'
      }, {
        date: '2016-05-04',
        name: '王小虎1',
        address: '上海市普陀区金沙江路 1517 弄',
        tag: '公司'
      }, {
        date: '2016-05-01',
        name: '王小虎1',
        address: '上海市普陀区金沙江路 1519 弄',
        tag: '家'
      }, {
        date: '2016-05-03',
        name: '王小虎1',
        address: '上海市普陀区金沙江路 1516 弄',
        tag: '公司'
      }]
      //   this.filteredVal=['公司'] //更新数据后重新设置筛选值不起作用
      
      let refs=this.$refs.filterTable,column = refs.columns[refs.columns.length - 1]
      refs.columns[refs.columns.length - 1].filteredValue = ['公司'];
      refs.store.commit('filterChange', {
        column,
        values: column.filteredValue,
        silent: true
      })
    }
  }
}
</script>
<style scoped>
.app-container {
  padding: 20px;
}
</style>