agGrid設置對指定行不能選中checkbox

官方文檔以下描述:
界面:
方法一:(只控制點擊checkbox時不能選擇,可是出了一個bug,若有遇到的夥伴望可以交流一下解決方案。 設置某些行不可進行行選擇時,這個方法對全選框也起了做用,致使一、全選時全選checkbox沒有選中圖標,二、反選也就是取消全部選擇失效)

解決辦法(方法二):2019-3-25補充:本身寫判斷有太多狀況須要判斷,並且很差找判斷條件,因此最後解決步驟:(換了一個方法解決)
一、 不可選的行不渲染checkbox,這裏說明:即便沒有渲染checkbox框,其實該行仍然能夠被選中(好比選中後的顏色會被加上)用的方法是:

checkboxSelection:(params)=>{
    let field=params.data;
    this.actions.getNotSelectAndRowId(params);//獲取不可選行的索引和id
    return params.data?!options.includes(field.f8)&&!options.includes(field.f11):false;
}
複製代碼

// 獲取衝突行的_id和rowid
getNotSelectAndRowId:function(params){
    let options=['是','是(請假)'];
    let field=params.data;
    let id = field._id;
    //獲取全部衝突行的_id /行ID  options.includes(field.f7)||
    if (options.includes(field.f8)||options.includes(field.f11)) {
        !this.data.notSelectData.includes(id)&& this.data.notSelectData.push(id)
        if (params.node) !this.data.notSelectRowId.includes(params.node.id)&&this.data.notSelectRowId.push(params.node.id)
        else if (params.id) !this.data.notSelectRowId.includes(params.id)&&this.data.notSelectRowId.push(params.id)
    }
},
複製代碼

二、從api裏獲取全部選中的行,而後根據條件篩選不可選的,把這些行存起來,行索引和每行的惟一識別的好比id(有時候id多是索引,要區別開)

方法:api.getSelectedRows()
複製代碼

let rows = this.agGrid.gridOptions.api.getSelectedRows();
//去掉rows中衝突的行數據
if ((this.data.viewMode== "viewFromCorrespondence"||this.data.viewMode=='editFromCorrespondence') &&this.data.parentTableId== "8174_vZhJu4jY8yfZpVTjkmsrhF") {
    for (let r = 0; r < rows.length; r++) {
        for (let j = 0; j < this.data.notSelectData.length; j++) {
            if (rows[r]&&rows[r]._id == this.data.notSelectData[j]) {
                rows.splice(r, 1)
            }
        }
    }
    this.actions.removeNotSelectDataColor()
}
複製代碼

三、第一個:判斷單行點擊,單擊某個單元格屢次可能會選中改行第二個:點擊全選,其實點擊全選仍是選中的所有數據,這時候經過以前拿到的每行的id的數組,把不可選的行從getSelectedRows()這去除掉,這樣保存下來的數據裏就不會存在不可選的行數據此外,由於全選會給全部行加上選中的顏色,這裏須要經過行索引的數組把顏色去掉複製代碼

//移除衝突行的選中顏色
  removeNotSelectDataColor:function(){
console.log('this.data.isSaveSelectData',localStorage.getItem('isSaveSelectData'),localStorage.getItem('isSaveSelectData')=='false',typeof localStorage.getItem('isSaveSelectData'))
      //若是剛剛保存的排期單對應關係數據,就返回不取消顏色
      if (localStorage.getItem('isSaveSelectData')!='false'){
          return;
      }
      for(let i=0;i<$('.ag-row').length;i++){
          let rowId = $('.ag-row')[i].getAttribute('row');
          //let className = $('.ag-row')[i].className;
          if (this.data.notSelectRowId.includes(rowId)){
              $($('.ag-row')[i]).removeClass('ag-row-selected')
          }
      }
  },
複製代碼

總結:這個方法其實就是障眼法,頁面看着沒選中,實際上是選中狀態的,只是人爲的把選中顏色取消了,把checkbox取消了,把不可選的行數據直接從全部數據裏刪掉了,這樣保存和全選反選就沒問題了
遇到一個bug:滾動可能以前沒有顏色的不可選的行顏色會被再次加上,這個把去掉顏色 的方法在滾動事件裏在執行一次就ok複製代碼

this.el.find('.ag-body-viewport').on('scroll', _.debounce((e) => {
    That.actions.setFloatingFilterInput();
    //解決agGrid滾動衝突行顏色問題
    this.actions.removeNotSelectDataColor();
}, 700));
複製代碼

其餘問題針對不一樣的狀況而定,願你們寫代碼寫的開心
相關文章
相關標籤/搜索