В рамках приложения Angular я занимаюсь разработкой таблицы на основе ag-grid и хочу отобразить определенную ячейку в виде ссылки html.
Поскольку я динамически создаю columnDef, я бы хотел избежать жесткого кодирования компонента средства визуализации ячеек ( ForeignKeyRendererComponent в приведенном ниже коде) в определении столбца.
К сожалению, я не могу зарегистрировать компоненты каркаса в соответствии с руководством: https://www.ag -grid.com / javascript-grid-components / # registering-framework-components
Когда я это делаю, я получаю эту ошибку:
Ошибка: не найдена фабрика компонентов для fkRenderer. Вы добавили это в
@ NgModule.entryComponents
at noComponentFactoryError (core.js: 3256)
Единственный способ, которым это работает, - это ссылка на компонент средства визуализации ячеек непосредственно в определении столбца, например: cellRendererFramework: ForeignKeyRendererComponent
.
Мои настройки и то, что я пробовал:
угловой v6.1.10
ag-grid v21.0.1
module.ts
@NgModule({
imports: [
AgGridModule.withComponents([ForeignKeyRendererComponent]),
...
],
declarations: [
ForeignKeyRendererComponent,
...
],
entryComponents: [
ForeignKeyRendererComponent
],
});
component.html
<ag-grid-angular style="height: 500px;"
class="ag-theme-balham"
[context]="context"
(gridReady)="onGridReady($event)"
[gridOptions]="gridOptions"
[frameworkComponents]="frameworkComponents"
[rowData]="rowData"
[columnDefs]="columnDefs"
rowSelection="multiple"
pagination=true
paginationPageSize=10>
</ag-grid-angular>
component.ts
private gridOptions: GridOptions = {
defaultColDef: {
filter: true
},
animateRows: true,
isExternalFilterPresent: this.isExternalFilterPresent.bind(this),
doesExternalFilterPass: this.doesExternalFilterPass.bind(this),
frameworkComponents: { fkRenderer: ForeignKeyRendererComponent }
};
...
this.columnDefs.push({
headerName: translation,
field: columnNames[index],
sortable: true,
filter: customFilter,
editable: true,
cellRendererFramework: 'fkRenderer'
});
Я также пытался указать frameworkComponents независимо от gridOptions: this.frameworkComponents = { fkRenderer: ForeignKeyRendererComponent }
, но получил ту же ошибку.
РЕДАКТИРОВАТЬ: предложение пробовал Шон Лэндсман:
Те же рамки Определение компонентов:
frameworkComponents = { fkRenderer: ForeignKeyRendererComponent };
Но с таким определением столбца:
...
cellRenderer: 'fkRenderer'
...
В этом случае я получаю новую ошибку:
custom-error-handler.ts: 14 TypeError: Невозможно прочитать свойство
'componentFromFramework' из NULL
в UserComponentFactory.push ../ node_modules / ag-grid-community / dist / lib / components / framework / userComponentFactory.js.UserComponentFactory.lookupComponentClassDef
(userComponentFactory.js: 283)
в CellComp.push ../ node_modules / ag-grid-community / dist / lib / render / cellComp.js.CellComp.chooseCellRenderer
(cellComp.js: 632)
в новом CellComp (cellComp.js: 80)
в RowComp.push ../ node_modules / ag-grid-community / dist / lib / render / rowComp.js.RowComp.createNewCell
(rowComp.js: 610)
в rowComp.js: 594
в Array.forEach ()
в RowComp.push ../ node_modules / ag-grid-community / dist / lib / render / rowComp.js.RowComp.insertCellsIntoContainer
(rowComp.js: 587)
в RowComp.push ../ node_modules / ag-grid-community / dist / lib / render / rowComp.js.RowComp.refreshCellsInAnimationFrame
(rowComp.js: 503)
в AnimationFrameService.push ../ node_modules / ag-grid-community / dist / lib / misc / animationFrameService.js.AnimationFrameService.executeFrame
(animationFrameService.js: 84)
в ZoneDelegate.push ../ node_modules / zone.js / dist / zone.js.ZoneDelegate.invokeTask
(zone.js: 421) * 1 064 *