从 cellRendererFramework 向父级发出事件

Dal*_*las 6 ag-grid angular ag-grid-angular

使用 ag-grid,您可以定义GridOptions.columnDefs列信息,包括cellRendererFramework. 我有一个我正在使用的组件,cellRendererFramework其中包含一个通过单击其模板中的按钮触发的事件。我希望能够将此事件发送到父级(在其中定义 columnDefs,以及ag-grid-angular从何处初始化)。

我可以看到我可以让事件通过ag-grid-angularcellClicked事件...然后我可以查看事件以解析事件目标等信息并查看它是否在按钮上等...但我希望我不必这样做,并且有一种方法可以从cellRendererFramework组件 ts 中获取事件,向上。


GridOption.columnDefs对此列的定义如下所示:

{
  headerName: 'Actions',
  cellRendererFramework: ActionCellComponent,
  suppressFilter: true,
}
Run Code Online (Sandbox Code Playgroud)

ActionCellComponent有一个带有单击事件的按钮的模板,例如(click)="actions.deleteSchema($event)"并在组件 ts 中被拾取。

我希望能得到从事件ActionCellComponentAdminComponent哪个主机ag-grid和columnDefs,而无需通过解析cellClicked事件。

dee*_*Dev 8

我在寻找一种干净的方法来做到这一点时遇到了问题。您可以使用它来获取对已初始化cellRenderer.

import {GridOptions} from "ag-grid";
constructor(){ 
    this.gridOptions = <GridOptions>{
        context: {
            componentParent: this
        }
    };
} 
Run Code Online (Sandbox Code Playgroud)

确保在 HTML 中绘制网格时

<ag-grid-angular #grid-reference [gridOptions]="gridOptions">
Run Code Online (Sandbox Code Playgroud)

然后在你的cellRenderer包含中agInit,当类被绘制时它会被触发。

public params;

public agInit(params: any): void {
    this.params = params;

    console.log(this.params.context.componentParent); 
    // access to parent functions / variables etc
}
Run Code Online (Sandbox Code Playgroud)

因此,例如在事件之后,如果您public hello: string在父级中有,则可以执行以下操作。

this.params.context.componentParent.hello = "hi"; // could be function call.
Run Code Online (Sandbox Code Playgroud)

这应该允许您根据需要在两者之间进行交互。上下文是绑定的。

我希望这就是你正在寻找的。

这是ag-grid 的文档