element-ui表格中勾選checkbox,高亮當前行

image

我們在做后臺管理系統的時候經常需要操作表格,這里我們要實現的一個功能就是,勾選復選框,高亮顯示當前行,也就是當前行樣式改變。這是一個非常常見的使用場景,官網給我們提供了一個帶Checkbox的table表格,但是并沒有給出上述使用案例,解決辦法有很多,我簡單總結下我自己的實現過程,希望能幫助到有同樣需求的小伙伴。

image

勾選表格中當前項時會觸發(fā)selection-change事件,在<el-table>中綁定handleSelectionChange方法。

        <el-table
          @selection-change="handleSelectionChange"
        >

編寫handleSelectionChange方法,實現思路就是根據勾選當前行的下標,改變當前樣式。但是element table表格中沒有獲取勾選后當前行index的方法,這里主要通過兩個forEach遍歷實現。

在data中定義tableData的時候一定要設置id屬性,因為這里我們是通過id的對比來獲取當前行的下標。

        tableData: [{
          id:0,
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1518 弄'
        }

下列方法打印出來的i就是你要獲取的勾選行的索引值,我們在data中定義一個空數組,專門用來存儲選中項的下標,方便使用。

      handleSelectionChange(val) {
       var arr = [];
       val.forEach((val, index) => {
      this.tableData.forEach((v, i) => {
       // id 是每一行的數據id
            if(val.id == v.id){
              // console.log(i);
              arr.push(i)
            }
          })
        })   
        this.multipleSelection = arr;
      }

獲取到下標之后就需要改變樣式,給<el-table>標簽綁定修改當前行樣式的方法rowStyle

        <el-table
          @selection-change="handleSelectionChange"
          :row-class-name="rowStyle"
        >

編寫rowStyle方法,思路是循環(huán)便利multipleSelection數組,取出存儲的下標,與當前行下標做對比,如果相同則返回rowStyle,改變當前行的樣式。

這里需要注意一個問題:

forEach中return無效!我們希望達到某一條件時,跳出循環(huán),代碼終止,使用forEach進行遍歷是無法實現的。

原因:forEach()無法在所有元素都傳遞給調用的函數之前終止遍歷!

                this.multipleSelection.forEach((v)=>{
          if(rowIndex === v){
            return 'rowStyle'
          }
        })

解決方法:使用for替換forEach

      rowStyle({row, rowIndex}){
        let arr =  this.multipleSelection;
        for(let i = 0; i < arr.length; i++){
          if(rowIndex === arr[i]){
            return 'rowStyle'
          }
        } 
      }

在style中定義選中行的樣式

</style>
  .rowStyle{
    background-color:red!important;
  }
</style>

另外如果想更改鼠標移入的hover樣式,要注意需要在td上修改,因為事件是添加在td身上的,在tr上修改無效。

    .el-table{
      width: 1163px;  
      margin: 0 auto;
      .el-table__body{
        tr:hover>td{
          background-color:rgba(238,250,249,1)!important;
        }
      }
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容