Website-Suche

angular - Eigenschaft 'getFrameworkComponentInstance' existiert nicht im Typ 'ICellRendererComp'


Ich versuche, die Instanz des Zell-Renderers (Angular-Komponente) im rowSelected-Ereignishandler zu erhalten:

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

Leider erhalte ich den Fehler während der Kompilierung der Angular-Anwendung (ts):

Eigenschaft 'getFrameworkComponentInstance' existiert nicht im Typ 'ICellRendererComp'

Die Implementierung stammt aus der offiziellen Dokumentation unter https://www.ag-grid.com/javascript-grid-cell-rendering-components/ (siehe Zugriff auf Zell-Renderer-Instanzen).

Hier ist eine mögliche Fabrikmethode, die public getFrameworkComponentInstance definiert.

Es ist eine unerwartete Situation, weil ich beim Debuggen dieser Methode den Renderer mit der Methode getFrameworkComponentInstance auf instances[0] abrufen kann.

Antwort #1

Nach dem, was ich in den Schnittstellen des ICellRenderer gesehen habe, hat die Schnittstelle ICellRendererComp nicht die Funktion getFrameworkComponentInstance.

Ich habe viel mit ag-grid-angular gearbeitet und festgestellt, dass die Schnittstellen manchmal nicht dem entsprechen, was wirklich im Objekt ist (fehlende Funktionen/Variablen).

Das Problem liegt hauptsächlich an tslint, das der Methode nicht vertraut, da sie nicht in der Schnittstelle enthalten ist. Um das zu beheben, habe ich meine eigene benutzerdefinierte Schnittstelle erstellt, die ICellRendererComp erweitert, aber mit der Funktion.

Auf diese Weise können Sie, wenn Sie versuchen, Ihre Instanz aufzurufen, sie auf Ihr Interface casten. Ich habe viele Dinge ausprobiert und nur das hat für mich funktioniert.

Antwort #2

Ich stimme den Gründen in der obigen Antwort zu, jedoch hat mir ein kürzerer Ansatz Zeit gespart.
Anstatt eine benutzerdefinierte Schnittstelle zu erstellen, hat bei mir Folgendes funktioniert -

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

Verwandte Artikel