方法一:(只控制点击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));
复制代码
其余问题针对不一样的状况而定,愿你们写代码写的开心