当前位置:   article > 正文

vue+elmentUi实现table列筛选动态展示功能_vue element 怎么根据筛选条件动态显示列表字段

vue element 怎么根据筛选条件动态显示列表字段

table列筛动态选展示功能的实现

前言: 用过elementUi的小伙伴都知道,用它配合vue来写前端页面是很爽的,在大多数情况下,直接拿过来使用就能满足产品需求。就拿table组件来说,从简单的表格展示到到复杂自定义,开发者把很多可能涉及到的场景都考虑了进来。但是细心的你可能会发现,在使用table组件的时候,行是动态加载的,很多的操作都是对行进行的,而列是在一开始使用的时候要展示哪些列就写死了,如果展示的列很多,就算使用了固定列啥的冻结,用户在操作的时候依然会有很多不便,那么能不能通过筛选操作动态的展示想要看到的列数据呢?comme on,我们一起来看看吧!

首先使用table组件正常展示表格数据,把本来要写死的列通过for循环展示:

  1. <el-table :data="tableData" border style="position: relative;">
  2. <el-table-column type="index" label="序号" width="100" align="center"></el-table-column>
  3. <el-table-column v-for="(col,index) in colums" :key="index" align="center"
  4. :prop="col" :label="col">
  5. </el-table-column>
  6. </el-table>

结果发现表格数据展示正常:

在这里插入图片描述

然后使用Popover弹出框实现点击弹出筛选项,进行筛选操作:

  1. <template>
  2. <div class="containClass">分类
  3. <h3 class="title">列动态展示table案例</h3>
  4. <el-popover
  5. placement="bottom"
  6. width="150"
  7. trigger="click">
  8. <el-checkbox-group v-model="checkList">
  9. <el-checkbox :label="item" v-for="(item, i) in checkLabels" :key="i" style="display: block;"></el-checkbox>
  10. </el-checkbox-group>
  11. <span v-show="canDo" class="filterFuncClass" @click="handlerFilterFunc('filter')">筛选</span>
  12. <span v-show="!canDo" class="disabledClass">筛选</span>
  13. <span v-show="canDo" class="filterFuncClass" @click="handlerFilterFunc('cancel')">取消</span>
  14. <span v-show="!canDo" class="disabledClass">取消</span>
  15. <span></span>
  16. <span class="filterClass" slot="reference">筛选
  17. <i class="fa fa-filter"></i>
  18. </span>
  19. </el-popover>
  20. <el-table :data="tableData" border style="position: relative;">
  21. <el-table-column type="index" label="序号" width="100" align="center"></el-table-column>
  22. <el-table-column v-for="(col,index) in colums" :key="index" align="center"
  23. :prop="col"
  24. :label="col"
  25. >
  26. </el-table-column>
  27. </el-table>
  28. </div>
  29. </template>

点击筛选后,页面可进行条件选择,效果展示如下:

在这里插入图片描述

加入js操作代码,最中全部代码如下:

  1. <template>
  2. <div class="containClass">分类
  3. <h3 class="title">列动态展示table案例</h3>
  4. <el-popover
  5. placement="bottom"
  6. width="150"
  7. trigger="click">
  8. <el-checkbox-group v-model="checkList">
  9. <el-checkbox :label="item" v-for="(item, i) in checkLabels" :key="i" style="display: block;"></el-checkbox>
  10. </el-checkbox-group>
  11. <span v-show="canDo" class="filterFuncClass" @click="handlerFilterFunc('filter')">筛选</span>
  12. <span v-show="!canDo" class="disabledClass">筛选</span>
  13. <span v-show="canDo" class="filterFuncClass" @click="handlerFilterFunc('cancel')">取消</span>
  14. <span v-show="!canDo" class="disabledClass">取消</span>
  15. <span></span>
  16. <span class="filterClass" slot="reference">筛选
  17. <i class="fa fa-filter"></i>
  18. </span>
  19. </el-popover>
  20. <el-table :data="tableData" border style="position: relative;">
  21. <el-table-column type="index" label="序号" width="100" align="center"></el-table-column>
  22. <el-table-column v-for="(col,index) in colums" :key="index" align="center"
  23. :prop="col"
  24. :label="col"
  25. >
  26. </el-table-column>
  27. </el-table>
  28. </div>
  29. </template>
  30. <script>
  31. export default {
  32. name: 'Catelog',
  33. data () {
  34. return {
  35. tableData: [
  36. {
  37. date: '2016-05-02',
  38. name: '王小虎',
  39. address: '上海市普陀区金沙江路 1518 弄',
  40. salary: 10000
  41. },
  42. {
  43. date: '2016-05-04',
  44. name: '张小龙',
  45. address: '上海市普陀区金沙江路 1517 弄',
  46. salary: 12000
  47. },
  48. {
  49. date: '2016-05-01',
  50. name: '赵小牛',
  51. address: '上海市普陀区金沙江路 1519 弄',
  52. salary: 9000
  53. },
  54. {
  55. date: '2016-05-03',
  56. name: '李小狗',
  57. address: '上海市普陀区金沙江路 1516 弄',
  58. salary: 20000
  59. },
  60. {
  61. date: '2016-05-06',
  62. name: '孙小猪',
  63. address: '上海市普陀区金沙江路 1519 弄',
  64. salary: 5500
  65. }
  66. ],
  67. colums: [],
  68. checkLabels: [],
  69. checkList: []
  70. }
  71. },
  72. computed: {
  73. canDo () {
  74. return this.checkList.length > 0
  75. }
  76. },
  77. methods: {
  78. handlerFilterFunc (type) {
  79. console.log(type)
  80. if (type === 'filter') {
  81. this.colums = this.checkList
  82. } else if (type === 'cancel') {
  83. this.checkList = []
  84. this.colums = JSON.parse(JSON.stringify(Object.keys(this.tableData[0])))
  85. }
  86. }
  87. },
  88. created () {
  89. this.checkLabels = JSON.parse(JSON.stringify(Object.keys(this.tableData[0])))
  90. this.colums = JSON.parse(JSON.stringify(Object.keys(this.tableData[0])))
  91. }
  92. }

只要拿到后台返回的数据即可,最后功能效果如下:

在这里插入图片描述

小提示: 示例中的筛选按钮位置是随便放的,如果需求里面要求筛选功能放在某个列的名字旁边,只需要通过绝对定位放到需要的位置即可:
在这里插入图片描述

在这里插入图片描述

The End !

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/641970
推荐阅读
相关标签
  

闽ICP备14008679号