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

如何在ng2-smart-table加载数据前显示加载器?

解决ng2-smart-table数据加载延迟的加载器显示问题

问题原因

你当前代码中,创建ServerDataSource后立刻调用this.loader.hide(),但ServerDataSource的API请求是异步执行的,导致全局加载器提前消失,而表格数据尚未完成绑定,出现空白期引发用户困惑。

解决方案

方案1:启用表格内置加载指示器

ng2-smart-table本身支持内置加载状态,只需在settings中配置loading选项,表格会在数据加载过程中自动显示加载动画,无需依赖全局加载器:

修改你的settings配置:

this.settings = {
  selectMode: 'single',
  hideHeader: false,
  hideSubHeader: false,
  mode: 'external',
  noDataMessage: '',
  // 添加加载配置
  loading: {
    indicator: true,
    // 可选:自定义加载模板(根据你的UI需求调整)
    template: `
      <div style="text-align: center; padding: 20px;">
        <span class="spinner-border text-primary"></span>
        <p>加载中...</p>
      </div>
    `
  },
  actions: {
    columnTitle: 'Action',
    position: 'right',
    width: '0%',
    add: false,
    edit: false,
    delete: false
  },
  columns: {
    Name: {
      title: 'Name',
      filter: false,
      width: '200px',
      type: 'custom'
    },
    version: {
      title: 'Version',
      width: '100px',
      filter: false,
      type: 'html'
    }
  },
  pager: {
    display: true,
    perPage: 10
  },
};

调整API调用函数,确保加载器在数据加载完成后隐藏:

function_callAPI(){
  this.loader.show();
  this.sourceData = new ServerDataSource(this.httpClient, {
    endPoint: this.baseUrl + "api/loadData",
    pagerLimitKey: "pageSize",
    pagerPageKey: "pageIndex",
    sortDirKey: "SortDirection",
    sortFieldKey: "SortColumn",
    filterFieldKey: 'filter',
    dataKey: 'result.data',
    totalKey: 'result.total'
  });
  
  // 监听表格数据加载完成事件,隐藏全局加载器
  this.sourceData.onChanged().subscribe((change) => {
    if (change.action === 'load') {
      this.loader.hide();
    }
  });
}

方案2:手动控制全局加载器的显示时机

如果更倾向使用全局加载器,关键是要等待ServerDataSource的数据加载完成后再隐藏。利用ServerDataSource的onChanged事件监听加载动作:

修改API调用函数:

function_callAPI(){
  this.loader.show();
  
  // 创建数据源
  this.sourceData = new ServerDataSource(this.httpClient, {
    endPoint: this.baseUrl + "api/loadData",
    pagerLimitKey: "pageSize",
    pagerPageKey: "pageIndex",
    sortDirKey: "SortDirection",
    sortFieldKey: "SortColumn",
    filterFieldKey: 'filter',
    dataKey: 'result.data',
    totalKey: 'result.total'
  });

  // 订阅数据源变化事件,加载完成时隐藏加载器
  this.sourceData.onChanged().subscribe((changeEvent) => {
    if (changeEvent.action === 'load') {
      this.loader.hide();
    }
  });
}

额外优化:设置加载中的无数据提示

可以在settings中配置noDataMessage为加载中的提示,避免表格完全空白:

this.settings = {
  // 原有配置...
  noDataMessage: '数据加载中...',
  // 原有配置...
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:48:20