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

Angular9 ng2-smart-table服务端分页排序及列加锚点实现咨询

Angular 9 ng2-smart-table 服务端分页/排序 + 自定义锚点列实现方案

一、服务端分页与排序实现

核心通过external模式+tableChanged事件触发接口调用,所有本地分页、排序逻辑关闭,完全由服务端返回数据驱动。

实现步骤

  • 第一步:配置表格基础参数,开启外部处理模式
// 组件内table配置
settings = {
  pager: {
    display: true,
    perPage: 10, // 默认每页展示条数
    mode: 'external' // 关闭本地分页,走服务端分页
  },
  sort: {
    mode: 'external' // 关闭本地排序,走服务端排序
  },
  columns: {
    // 后续补充列配置
  }
}
  • 第二步:模板中绑定tableChanged事件,该事件会在点击页码、点击表头触发排序时自动触发
<ng2-smart-table 
  [settings]="settings" 
  [source]="tableData"
  (tableChanged)="loadServerData($event)"
></ng2-smart-table>
  • 第三步:实现接口调用方法,提取分页、排序参数请求后端
// 组件属性声明
tableData: any[] = [];
total: number = 0;

loadServerData(event: any) {
  // 提取分页参数
  const page = event.paging.page;
  const pageSize = event.paging.perPage;
  // 提取排序参数
  let sortField = '';
  let sortOrder = '';
  if(event.sort?.length) {
    sortField = event.sort[0].field;
    sortOrder = event.sort[0].direction; // 返回值为asc/desc
  }

  // 调用后端接口
  this.http.post('/api/your-business-list', {
    page,
    pageSize,
    sortField,
    sortOrder
  }).subscribe((res: any) => {
    this.tableData = res.records; // 赋值当前页列表数据
    this.total = res.total; // 赋值总条数,用于分页器计算总页码
    // 更新分页器配置
    this.settings.pager.totalItems = this.total;
    this.settings = Object.assign({}, this.settings);
  })
}

二、指定列添加锚点链接实现

通过自定义列渲染组件实现,ng2-smart-table支持custom类型列,指定自定义渲染组件即可实现任意自定义内容。

实现步骤

  • 第一步:创建自定义锚点渲染组件
// link-render.component.ts
import { Component, Input } from '@angular/core';
import { Cell } from 'ng2-smart-table/lib/lib/data-set/cell';

@Component({
  template: `
    <!-- 内部路由跳转用routerLink,外部链接换成href即可 -->
    <a [routerLink]="['/detail', cell.getRow().getData().id]" target="_blank">
      {{ cell.getValue() }}
    </a>
  `
})
export class LinkRenderComponent {
  // 固定注入cell参数,可获取当前单元格值、当前行全量数据
  @Input() cell: Cell;
}
  • 第二步:在所属模块注册自定义组件
// your-module.module.ts
import { NgModule } from '@angular/core';
import { Ng2SmartTableModule } from 'ng2-smart-table';
import { LinkRenderComponent } from './link-render.component';

@NgModule({
  imports: [
    Ng2SmartTableModule,
    // 其他业务依赖
  ],
  declarations: [LinkRenderComponent],
  // Angular 9动态渲染的组件必须加入entryComponents
  entryComponents: [LinkRenderComponent]
})
export class YourBusinessModule {}
  • 第三步:在表格列配置中指定自定义组件
// 调整之前的settings配置
settings = {
  // 之前的pager、sort配置不变
  columns: {
    // 要加锚点的列配置
    businessName: {
      title: '业务名称',
      type: 'custom',
      renderComponent: LinkRenderComponent
    },
    // 其他普通列配置
    createTime: {
      title: '创建时间'
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:39:02