You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ag-grid-angular中将‘no rows to show’替换为动态组件?

在ag-grid-angular中实现动态标题/描述的无数据覆盖层组件

步骤1:创建自定义无数据覆盖层组件

新建Angular组件,实现ag-grid提供的INoRowsOverlayAngularComp接口,通过agInit方法接收动态参数:

// no-rows-overlay.component.ts
import { Component } from '@angular/core';
import { INoRowsOverlayAngularComp } from 'ag-grid-angular';

@Component({
  selector: 'app-no-rows-overlay',
  template: `
    <div class="flex flex-col items-center">
      <img src="assets/images/folder-plus.svg" alt="No data" class="w-10 h-10 text-gray-400">
      <p class="font-bold text-xl text-gray-500 py-3">{{ title }}</p>
      <p class="text-base text-gray-400">{{ description }}</p>
    </div>
  `
})
export class NoRowsOverlayComponent implements INoRowsOverlayAngularComp {
  title: string = 'No data found';
  description: string = 'Data does not exist for selected filters.';

  agInit(params: { title?: string; description?: string }): void {
    // 用传入参数覆盖默认值
    if (params.title) this.title = params.title;
    if (params.description) this.description = params.description;
  }
}

步骤2:在模块中注册组件

在NgModule中声明该组件,并通过AgGridModule.withComponents告知ag-grid:

// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AgGridModule } from 'ag-grid-angular';
import { NoRowsOverlayComponent } from './no-rows-overlay.component';
import { YourGridComponent } from './your-grid.component'; // 你的ag-grid宿主组件

@NgModule({
  declarations: [
    YourGridComponent,
    NoRowsOverlayComponent
  ],
  imports: [
    BrowserModule,
    AgGridModule.withComponents([NoRowsOverlayComponent])
  ],
  bootstrap: [YourGridComponent]
})
export class AppModule { }

步骤3:配置ag-grid使用自定义组件

在ag-grid宿主组件中,配置gridOptions指定自定义组件并传入动态参数:

// your-grid.component.ts
import { Component } from '@angular/core';
import { GridOptions } from 'ag-grid-community';
import { NoRowsOverlayComponent } from './no-rows-overlay.component';

@Component({
  selector: 'app-your-grid',
  template: `<ag-grid-angular [gridOptions]="gridOptions" [rowData]="rowData"></ag-grid-angular>`
})
export class YourGridComponent {
  rowData: any[] = []; // 示例空数据
  gridOptions: GridOptions = {
    // ...其他ag-grid配置
    frameworkComponents: {
      customNoRowsOverlay: NoRowsOverlayComponent
    },
    overlayNoRowsComponent: 'customNoRowsOverlay',
    // 传入动态标题和描述
    overlayNoRowsComponentParams: {
      title: '暂无数据',
      description: '当前筛选条件下没有匹配的数据,请调整筛选条件后重试。'
    }
  };
}

步骤4:运行时动态更新内容

如果需要在运行时(比如筛选条件变化后)更新标题和描述,可通过gridApi修改参数:

// your-grid.component.ts
import { GridApi } from 'ag-grid-community';

export class YourGridComponent {
  private gridApi!: GridApi;

  onGridReady(params: { api: GridApi }): void {
    this.gridApi = params.api;
  }

  updateNoRowsOverlay(title: string, description: string): void {
    this.gridApi?.setGridOption('overlayNoRowsComponentParams', { title, description });
  }
}

同步修改模板绑定gridReady事件:

<ag-grid-angular 
  [gridOptions]="gridOptions" 
  [rowData]="rowData"
  (gridReady)="onGridReady($event)"
></ag-grid-angular>

内容的提问来源于stack exchange,提问作者Nirav Ghodadra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:10:14