Javascript AG-GRID:onRowSelected和setSelected之间的无限循环
我试图选择一些行,这取决于我是否选择或取消选择一行,如果我选择一行,索引低于所选行索引的行也将被选中。 我遇到的问题是,每次执行setSelected(true)或setSelected(false)时,onRowSelected事件都会再次触发,并成为一个无限循环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
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上执行这两项操作。我想在选中复选框时执行此操作。