函数 rowSelected 已被调用两次(选中和取消选中)

Posted

技术标签:

【中文标题】函数 rowSelected 已被调用两次(选中和取消选中)【英文标题】:Function rowSelected has been called twice(selected and deselected) 【发布时间】:2020-03-21 23:58:15 【问题描述】:

我有一个带有 Ag-Grid 的网格并且工作得很好,但我需要将事件单击放在具有某些特定条件(错误条件回调)的行上。所以当第一次点击行时正常工作 但第二次以后得到最后一次值和当前值,所以打印当前值。更改顺序。

我的模板文件:

<!-- <button (click)="setDataValue()">rowNode.setDataValue</button> -->
<ag-grid-angular
#agGrid
style="width: 100%; height: 450px;"
class="ag-theme-material"
(gridReady)="onGridReady($event)"
(rowSelected)="onRowSelected($event)" // ----------The FUNCTION----------
[rowData]="rowData"
[gridOptions]="gridOptions"
[columnDefs]="columnDefs"
[defaultColDef]="defaultColDef"
[modules]="modules"
[pagination]="true"
[paginationPageSize]="paginationPageSize"
[pagination]="true"
[domLayout]="domLayout"
[rowHeight]="rowHeight"
[overlayLoadingTemplate]="overlayLoadingTemplate"
[overlayNoRowsTemplate]="overlayNoRowsTemplate"
[rowSelection]="rowSelection"
>
</ag-grid-angular>
 <div #anchorErrorMessage class="container">
  <div
   [hidden]="!rowErrorMessage"
   class="alert alert-danger"
   role="alert"
  >
 <h4 class="alert-heading">Erro de inconsistência!</h4>
 <hr />
 <ul>
   <li *ngFor="let error of rowErrorMessage">
       error 
   </li>
  </ul>
 </div>
</div>

我的 .ts 文件

onRowSelected(event) 
  console.log(event.node.data.erros);

  this.rowErrorMessage = '';
  this.rowErrorMessage = event.node.data.erros;

  setTimeout(() => 
    this.anchorErrorMessage.nativeElement.scrollIntoView( behavior: 'smooth' );
  , 20);

我的日志:

所以每次我点击获取 2 个值。请帮助我。

【问题讨论】:

【参考方案1】:

我明白了。我的问题是这个事件:

(rowSelection)="onRowSelected(event)"

调用两个方法,selected和deselected,所以我只是放了一个条件来做 选择我想要的任何内容。

https://www.ag-grid.com/javascript-grid-events/#reference-selection

【讨论】:

【参考方案2】:

你说得对,令人讨厌的是,agGrid 调用了“onRowSelected”事件两次,一次用于被选中的行,一次用于未选择的行。

(第二个事件真的应该单独提供,在一个名为“onRowUnselected”的事件下。)

此外,event.type 值两次都设置为“rowSelected”(叹气),因此您实际上需要注意 event.node.selected 值。

因此,要运行一些代码,仅基于选中的行,您可以使用:

  onRowSelected(event) 
      if (!event.node.selected)
          return;

      let id = event.node.data.YourPrimaryKeyField;
      console.log('Selected row: ' + id);
      . . . 
  

为什么 agGrid 文档没有提到这个重要的 event.node.selected 值?!

https://www.ag-grid.com/javascript-grid-events/#selection

【讨论】:

以上是关于函数 rowSelected 已被调用两次(选中和取消选中)的主要内容,如果未能解决你的问题,请参考以下文章

致命异常:NSInternalInconsistencyException 此请求已被绝育 - 您不能调用 -sendResponse: 两次,也不能在编码后调用

Jest Vue 预期的模拟函数已被调用,但未调用

Scala:抽象类型模式 A 未选中,因为它已被擦除消除

Spark:在查询中两次使用临时表?

jquery radio选中值的保存问题

为啥C++里面,析构函数会被调用两次