element ui table 增加筛选

  • 网上大部分都可以增加筛选功能,但没有找到下列这种情况。

若表头数据较多,而表头是自己通过v-for循环产生,这种情况怎么给虚拟dom添加筛选规则。

<el-table-column v-for="item in tableHead" :key="item.id" :prop="item.id" :label="item.label" :filters="item.filter" :filter-method="item.filter && filterHandler">
复制代码
  • 列表头是通过v-for循环遍历出来的数据

如何添加规则内容

首先,element提供了filters,filter-method两个属性,一个是写规则的内容,一个是写的方法。

this.tableHead = [
      {id: '1', label: xxx},
      {id: '2', label: xxx, filter: []},
      {id: '3', label: xxx, filter: []},
      {id: '4', label: xxx},
      {id: '5', label: xxx},
      {id: '6', label: xxx, filter: []}
    ]
复制代码

只需要在要添加规则的上面加上filter这个key值。

  • filter里面的内容要按照element ui 上面的格式塞进去 :filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]" 所以只能用方法来找到相应的id然后再处理。
let filterList = this.tableHead.filter(i => i.id === '1')[0].filter
复制代码

规则的内容是和列表内容有关系,而一般情况下列表的内容也是从后端数据拿到的。所以要对规则的内容进行处理。

this.tableData.forEach((item) => {
      filterList.push({
      text: item.xxx, value: item.yyy
    })
 })
复制代码
  • 这样操作肯定会有重复的text和value,所以需要去重。 去重方法:
uniqArrObject (arr) {
   let result = {}
   let finalResult = []
   for (let i = 0; i < arr.length; i++) {
     result[arr[i].text] = arr[i]
   }
   for (let key in result) {
     finalResult.push(result[key])
   }
   return finalResult
 },
复制代码

得到最终的规则内容:

filterList = this.uniqArrObject(filterList)
复制代码

规则方法

filterHandler (value, row, column) {
   const property = column['property']
   return row[property] === value || row[property].value === value
},
复制代码

转载于:https://juejin.im/post/5bfcf83851882526a643f538

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在 Element UI 的表格中进行筛选,您可以使用表格组件提供的筛选功能。以下是一些步骤和示例代码,供您参考: 1. 首先,在需要使用表格的组件中导入 Element UITableTableColumn 组件。 ```javascript import { Table, TableColumn } from 'element-ui'; ``` 2. 在模板中使用 Table 组件,并在其中定义表格的列和数据源。 ```html <template> <div> <table> <el-table :data="tableData" style="width: 100%;"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="gender" label="性别"></el-table-column> </el-table> </table> </div> </template> ``` 3. 在 Vue 实例中定义表格的数据源,并在需要的时候使用 filter 方法进行筛选。 ```javascript export default { data() { return { tableData: [ { name: '张三', age: 20, gender: '男' }, { name: '李四', age: 25, gender: '女' }, { name: '王五', age: 22, gender: '男' } ] }; } }; ``` 4. 如果您想在表格中的某一列中加入筛选功能,可以使用 filter-method 属性和 scoped-slot 来实现。 ```html <template> <div> <table> <el-table :data="tableData" style="width: 100%;"> <el-table-column prop="name" label="姓名" :filter-method="filterName"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="gender" label="性别"></el-table-column> </el-table> </table> </div> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 20, gender: '男' }, { name: '李四', age: 25, gender: '女' }, { name: '王五', age: 22, gender: '男' } ] }; }, methods: { filterName(value, row) { return row.name.toLowerCase().includes(value.toLowerCase()); } } }; </script> ``` 在上面的例子中,我们在姓名列中定义了一个 filter-method 方法,用于筛选姓名。该方法会接收两个参数:筛选输入的值 value 和当前行的数据 row。您可以根据自己的需求进行筛选逻辑的编。 希望以上信息对您有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值