【问题标题】:Emit Event from cellRendererFramework to parent从 cellRendererFramework 向父级发送事件
【发布时间】:2019-09-21 08:06:42
【问题描述】:

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

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


我的GridOption.columnDefs 这个专栏的定义如下:

{
  headerName: 'Actions',
  cellRendererFramework: ActionCellComponent,
  suppressFilter: true,
}

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

我希望从ActionCellComponent 到托管ag-grid 和 columnDefs 的AdminComponent 获取事件,而无需解析cellClicked 事件。

【问题讨论】:

    标签: angular ag-grid ag-grid-angular


    【解决方案1】:

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

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

    确保在 HTML 中绘制网格时

    <ag-grid-angular #grid-reference [gridOptions]="gridOptions">
    

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

    public params;
    
    public agInit(params: any): void {
        this.params = params;
    
        console.log(this.params.context.componentParent); 
        // access to parent functions / variables etc
    }
    

    那么例如在一个事件之后,如果您在父级中有public hello: string,您可以执行以下操作。

    this.params.context.componentParent.hello = "hi"; // could be function call.
    

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

    我希望这就是你要找的。​​p>

    这里是ag-grid's documentation

    【讨论】:

    • 完美,与我的想法有点不同..但可以满足我的需要。谢谢
    • 是的,可能是其他方式,这对我有用,所以我想我会分享:-)
    • 这正是我正在寻找的解决方案。谢谢分享!
    • 没问题 :-)
    • 这太棒了!你为我节省了几个小时......实际上,我可能会放弃。
    猜你喜欢
    • 1970-01-01
    • 2019-02-22
    • 2021-04-16
    • 2023-03-03
    • 1970-01-01
    • 2017-10-18
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多