Обычно я просто использую событие gridReady, получаю API и вызываю sizeColumnsToFit ().
export class MyGridApplicationComponent {
private gridOptions: GridOptions;
private showGrid2: false;
constructor() {
this.gridOptions = <GridOptions>{
onGridReady: this.gridReady.bind(),
....
};
}
gridReady(params) {
params.api.sizeColumnsToFit();
}
....
Однако у меня есть сетка, которая находится на скрытой вкладке и поэтому, когда вызывается событие gridReady,ширина равна 0 (получите сообщение в консоли: «попытался вызвать sizeColumnsToFit (), но сетка возвращается с нулевой шириной, может быть, сетка еще не видна на экране?»).
<h2>Grid only visible after button click</h2>
<button (click)="showGrid2 = true;">Show grid</button><br/><br/>
<div style="width: 100%;" [hidden]="!showGrid2">
<ag-grid-angular #agGrid2 style="width: 100%; height: 200px;" class="ag-theme-fresh" [gridOptions]="gridOptions">
</ag-grid-angular>
</div>
Есть ли событие, к которому я могу подключиться, когда ag-grid станет видимым, чтобы я мог изменить его размер / размер?Я пробовал несколько смутно значимых событий (gridSizeChanged, firstDataRendered, columnVisible, columnResized), но безрезультатно.
У меня есть упрощенное воспроизведение в StackBlitz .
[РЕДАКТИРОВАТЬ] Я попытался изменить приведенное ниже предложение @ antirealm (посмотрев, изменил ли * ngIf на родительском div), и это сработало для моей (более) упрощенной версии проблемы: см. StackBlitzрепро .
Это все в контексте компонента вложенных вкладок, где ag-grid находится не на первой вкладке.Я попытался использовать * ngIf в div, содержащем содержимое вложенной вкладки:
<div *ngIf="hasBeenActive" [hidden]="!active"><ng-content></ng-content></div>
, и хотя DOM показывает, что ag-grid не существует, событие gridReady ag-grid по-прежнему вызывается раньшевторая вкладка была выбрана.См. Stackblitz repro .