Angular组件首次加载时如何隐藏无初始数据的ag-grid
Angular 控制ag-Grid初始隐藏、选值后加载展示的实现
直接通过状态位配合*ngIf控制表格渲染时机即可,完全避免初始空白表格的问题,实现步骤如下:
- 组件逻辑层新增显隐控制状态
初始将表格显示状态设为false,等用户选中下拉值、接口数据返回后,再把状态切为true,同时把接口返回值赋值给表格行数据。// 组件ts文件核心代码 import { Component } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { ColDef } from 'ag-grid-community'; @Component({ selector: 'app-customer-list', templateUrl: './customer-list.component.html' }) export class CustomerListComponent { // 表格显示开关,默认false,初始不渲染表格 showGrid = false; // 下拉框选中的客户ID currentCustomerId: string | null = null; // ag-Grid列配置 columnDefs: ColDef[] = [ { field: 'id', headerName: '编号' }, { field: 'name', headerName: '名称' }, { field: 'amount', headerName: '交易金额' } ]; // 表格行数据 rowData: any[] = []; // 下拉选项列表(可根据实际接口获取) customerOptions = [ { id: '1', name: '客户A' }, { id: '2', name: '客户B' } ]; constructor(private http: HttpClient) {} // 下拉选值触发事件 handleCustomerChange(selectedId: string) { this.currentCustomerId = selectedId; // 未选有效值时重置状态,隐藏表格 if (!selectedId) { this.showGrid = false; this.rowData = []; return; } // 拉取对应客户的数据 this.http.get<any[]>(`/api/customer/data?customerId=${selectedId}`).subscribe(data => { this.rowData = data; // 数据赋值完成后再显示表格 this.showGrid = true; }); } } - 模板层用结构指令控制表格渲染
不要用CSS隐藏属性,直接用*ngIf控制ag-Grid组件是否生成DOM,从根源避免空白表格渲染,也不会出现ag-Grid初始化尺寸异常的问题。<!-- 组件html模板核心代码 --> <div class="select-wrapper"> <span>选择客户:</span> <select (change)="handleCustomerChange($any($event.target).value)"> <option value="">请选择</option> <option *ngFor="let item of customerOptions" [value]="item.id"> {{ item.name }} </option> </select> </div> <!-- 仅当showGrid为true时才初始化渲染ag-grid --> <ag-grid-angular *ngIf="showGrid" style="width: 100%; height: 550px;" class="ag-theme-alpine" [columnDefs]="columnDefs" [rowData]="rowData" ></ag-grid-angular>
避坑提示:不要用
[hidden]属性或者display: none做显隐控制,这类方案会在页面初始化时就执行ag-Grid的渲染逻辑,只是视觉上不可见,既浪费渲染性能,还容易因为父容器初始无尺寸导致表格列宽、行高渲染错位。
内容的提问来源于stack exchange,提问作者meet patel
相关产品推荐
相关产品推荐

