Pesquisa de site

angular - Propriedade 'getFrameworkComponentInstance' não existe no tipo 'ICellRendererComp'


Estou tentando obter a instância do renderizador de célula (componente Angular) no manipulador de evento rowSelected:

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();
    }
}

Infelizmente, eu recebo o erro durante a compilação da aplicação Angular (ts):

A propriedade 'getFrameworkComponentInstance' não existe no tipo 'ICellRendererComp'

A implementação vem da documentação oficial em https://www.ag-grid.com/javascript-grid-cell-rendering-components/ (veja Acessando Instâncias de Renderizador de Células).

Aqui está um possível método de fábrica que define o público getFrameworkComponentInstance.

É uma situação inesperada porque, quando depuro este método, posso obter o renderizador com o método getFrameworkComponentInstance em instances[0].

Resposta #1

Pelo que vi nas interfaces do ICellRenderer, a interface ICellRendererComp não possui a função getFrameworkComponentInstance.

Eu trabalhei muito com ag-grid-angular e descobri que, às vezes, as interfaces não são relevantes para o que realmente está no objeto (faltando funções/variáveis).

O problema é principalmente por causa do tslint, que não confia no método já que ele não está na interface. Para resolver isso, eu criei minha própria interface personalizada que estende o ICellRendererComp, mas com a função.

Dessa forma, quando você tentar chamar sua instância, você pode convertê-la para sua interface. Eu tentei muitas coisas e apenas isso funcionou para mim.

Resposta #2

Concordo com os motivos na resposta acima, no entanto, uma abordagem mais curta me economizou tempo.
Em vez de criar uma interface personalizada, o seguinte funcionou para mim -

if (instances.length > 0) {
        var cellRenderer: any = instances[0];
        var wrapperInstance = cellRenderer.getFrameworkComponentInstance();
    }

Artigos relacionados