当前位置:   article > 正文

Vue——树行结构的el-table点击行高亮的问题_el-table使用高亮时点击后全变高亮

el-table使用高亮时点击后全变高亮

问题不大但很隐晦。这么小个问题最终花了几天才搞定,好几次想放弃,就一个感觉真的恶心。

场景一:直接修改el-table的样式。
修改插件的样式必须时全局的,但又不能影像到其他地方的el-table所以在前面加了父级div的classname.【程序员不需要你好牛逼但一定要规范,这样代码才容易维护,之前在大厂里经理交给我的】

  1. .parent-box .el-table__body tr.current-row>td {//高亮点击的行
  2.   background: rgb(77, 195, 255, 0.5) !important;
  3. }
  4. .parent-box .el-table__body tr:hover>td{//鼠标滑过时高亮行
  5.   background: rgb(77, 195, 255, 0.2);
  6. }

场景二:在点击后如果去页面没有元素被刷新,场景一是OK的。但如果有元素刷新(比如:显示隐藏某个div)会出现被点击高亮的行有马上恢复了原来的样子。
大概原因是:重新渲染列表,current-change发生了改变,冲原本选择的row,变成不在选择任何一行,导致问题很难排查。

网上看了很多人的都没说明白怎么处理,所以记录一下。

  1. <template>
  2. <el-table
  3. ref="projectPlanTable"
  4. :data="tableData.filter(data => !search || data.name.toLowerCase().includes(search.toLowerCase()))"
  5. :row-key="(row)=>{return row.id}"
  6. highlight-current-row
  7. border
  8. default-expand-all
  9. indent:10
  10. :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
  11. class="project-plan-table"
  12. @row-click="funcProjectPlanRowClick"
  13. :row-style="rowClassRender"
  14. >
  15. <el-table-column prop="name" label="名称" width="120"></el-table-column>
  16. <el-table-column prop="type" label="分类" width="auto"></el-table-column>
  17. </el-table>
  18. </template>
  19. <script>
  20. export default {
  21. data() {
  22. return {
  23. tableData: [],
  24. currentRowId: null,
  25. };
  26. },
  27. methods: {
  28. rowClassRender({row}) {
  29. if (row.id==this.currentRowId) {
  30. return { "background-color": "rgb(77, 195, 255, 0.5)" };
  31. } else {
  32. return '';
  33. }
  34. },
  35. funcProjectPlanRowClick(row){
  36. this.currentRowId = row.id;
  37. },
  38. }
  39. };
  40. </script>
  41. <style lang="less" scoped>
  42. .project-plan-table{
  43. width: 100%;
  44. height: 100%;
  45. color: #fff;
  46. font-size: 10px;
  47. border: 0;
  48. }
  49. </style>


几个地方:

  1. @row-click方法获取被点击行的id[这个id是自己的数据里面的,根据自己的数据换成自己的唯一标识就行]。
  2. :row-style在渲染每行的时候触发后面指定的方法。
  3. rowClassRender({row}){}方法的参数是 "{row}"话括弧不能少,否者无效。
  4. 不用setCurrentRow是因为setCurrentRow对于树状的table无效。

颜色渐变+点击高亮

  1. rowClassRender({row, rowIndex}) {
  2. if (rowIndex%2 === 1) {
  3. if (row.id==this.currentRowId) {
  4. return { "background-color": "rgb(77, 195, 255, 0.5)" };
  5. }
  6. return { "background-color": "rgb(0, 0, 0, 0.5)" };
  7. }else{
  8. if (row.id==this.currentRowId) {
  9. return { "background-color": "rgb(77, 195, 255, 0.5)" };
  10. }
  11. return '';
  12. }
  13. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号