Javascript AG-GRID:onRowSelected和setSelected之间的无限循环

Javascript AG-GRID:onRowSelected和setSelected之间的无限循环,javascript,angularjs,ag-grid,ag-grid-angular,Javascript,Angularjs,Ag Grid,Ag Grid Angular,我试图选择一些行,这取决于我是否选择或取消选择一行,如果我选择一行,索引低于所选行索引的行也将被选中。 我遇到的问题是,每次执行setSelected(true)或setSelected(false)时,onRowSelected事件都会再次触发,并成为一个无限循环 this.gridOptions.onRowSelected = function(event) { var rowIndexSelected = event.rowIndex; if (event.node.sel

我试图选择一些行,这取决于我是否选择或取消选择一行,如果我选择一行,索引低于所选行索引的行也将被选中。 我遇到的问题是,每次执行setSelected(true)或setSelected(false)时,onRowSelected事件都会再次触发,并成为一个无限循环

this.gridOptions.onRowSelected = function(event) {
    var rowIndexSelected = event.rowIndex;
    if (event.node.selected) {
        vm.gridOptionsSuiviPrestataire.api.forEachNode(function(rowNode, index) {
            if (index < rowIndexSelected) {
                rowNode.setSelected(true);
            }
        });             
    } else {
        vm.gridOptionsSuiviPrestataire.api.forEachNode(function(rowNode, index) {
            if (index > rowIndexSelected) {
                rowNode.setSelected(true);
            }
        }); 
    }
};
this.gridOptions.onRowSelected=函数(事件){
var rowIndexSelected=event.rowIndex;
if(event.node.selected){
vm.gridoptions suiviprestataire.api.forEachNode(函数(行节点,索引){
如果(索引行索引选择){
rowNode.setSelected(true);
}
}); 
}
};

有没有一种方法可以在不触发onRowSelected事件侦听器的情况下执行此操作,或者使用某些标志来阻止在方法内部执行代码?

节点。setSelected
有第三个参数称为
suppressFinishActions
,但当前它仅抑制
onSelectionChanged
事件。这是一个限制,ag Grid在待办事项中有两项(ag-2859和ag-2707)。我不确定他们什么时候会提供修复


现在,您可以尝试执行
node.selected=true
,但我注意到,以这种方式选择的行没有突出显示,这是通过手动选择或
setSelected

添加的,希望这对您有所帮助

let rowSelected = false;

this.gridOptions.onRowSelected = function (event) {

  if (rowSelected) {
    return;
  }

  var rowIndexSelected = event.rowIndex;
  if (event.node.selected) {
    vm.gridOptions.api.forEachNode(function (rowNode, index) {
      if (index < rowIndexSelected) {
        rowSelected = true;
        rowNode.setSelected(true);

      }
    });
  } else {
    vm.gridOptions.api.forEachNode(function (rowNode, index) {
      if (index > rowIndexSelected) {
        rowSelected = true;
        rowNode.setSelected(true);
      }
    });
  }

  rowSelected = false;
};
让rowSelected=false;
this.gridOptions.onRowSelected=函数(事件){
如果(选定行){
返回;
}
var rowIndexSelected=event.rowIndex;
if(event.node.selected){
vm.gridOptions.api.forEachNode(函数(行节点,索引){
如果(索引行索引选择){
rowSelected=true;
rowNode.setSelected(true);
}
});
}
rowSelected=false;
};

不要使用
onRowSelected
,而是捕获
rowClicked
并在那里实现您的逻辑。否则就会发生这种情况。我已经使用rowClicked显示弹出窗口,所以我无法在rowClicked上执行这两项操作。我想在选中复选框时执行此操作。