Estoy tratando de obtener la instancia del procesador de celdas (componente angular) en el controlador de eventos de fila seleccionada:
onRowSelected($event) { var selectedRow = this.gridApi.getDisplayedRowAtIndex($event.rowIndex); var params = { columns: ['added'], rowNodes: [selectedRow]}; var instances = this.gridApi.getCellRendererInstances(params); if (instances.length > 0) { var wrapperInstance = instances[0].getFrameworkComponentInstance(); } }Desafortunadamente, aparece el error durante la compilación de la aplicación angular (ts):
La propiedad 'getFrameworkComponentInstance' no existe en el tipo 'ICellRendererComp'
La implementación proviene de la documentación oficial en https://www.ag-grid.com/javascript-grid-cell-rendering-components/ (busque Acceso a instancias de renderizador de celdas).
Aquí hay un posible método de fábrica que define getFrameworkComponentInstance público.
Es una situación inesperada porque cuando depuro este método puedo obtener el renderizador con el método getFrameworkComponentInstance en instances[0] .
Por lo que vi en las interfaces de ICellRenderer , la interfaz ICellRendererComp no tiene la función getFrameworkComponentInstance.
He trabajado mucho con ag-grid-angular y descubrí que, a veces, las interfaces no son relevantes para lo que realmente hay en el objeto (funciones/variables faltantes).
El problema se debe principalmente a que tslint no confía en el método ya que no está en la interfaz. Para solucionarlo, creé mi propia interfaz personalizada que amplía ICellRendererComp pero con la función.
De esa manera, cuando intente llamar a su instancia, puede enviarla a su interfaz. He probado muchas cosas y solo esta me ha funcionado.
Estoy de acuerdo con las razones de la respuesta anterior, sin embargo, un enfoque más corto me ha ahorrado tiempo.
En lugar de crear una interfaz personalizada, lo siguiente me ha funcionado:
if (instances.length > 0) { var cellRenderer: any = instances[0]; var wrapperInstance = cellRenderer.getFrameworkComponentInstance(); }Desde v27 de AG Grid
Ya no necesita usar el método getFrameworkComponentInstance() , ya que su componente Angular se devolverá directamente desde getCellRendererInstances() . De modo que puede recorrer los componentes y llamar a sus métodos directamente.
const instances = this.gridApi.getCellRendererInstances(params) as MyComponent[]; instances.forEach((instance) => { instance.myComponentFunction(); });Consulte la documentación actualizada aquí: Procesador de celdas de componentes