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

AngularJS 1.x:能否为ngParams分页指定`data`以外的变量?

解决ngParams同一页面双分页数据覆盖问题

嘿,这个问题我之前做项目的时候也踩过坑!核心就是两个分页模块共用了同一个data变量,每次新的分页请求返回后,都会把之前模块的数据给冲掉,完全是变量作用域共享的锅。咱们一步步来修复:

  • 第一步:拆分数据存储变量
    把原来全局的$scope.data拆成两个独立的变量,比如$scope.table1Data和$scope.table2Data,让每个分页模块的结果都存在自己的专属变量里,从根源上避免覆盖。

  • 第二步:为每个分页模块创建独立的ngParams实例
    不能再共用同一个ngParams配置了,得给每个表格单独初始化一个ngParams对象,各自绑定对应的接口请求和数据变量。示例代码如下:

    // 第一个表格的ngParams配置
    $scope.table1Params = ngTableParams({
      page: 1, // 默认页码
      count: 10, // 默认每页条数
      // 这里可以加第一个表格的初始筛选参数
      filter: { name: '' }
    }, {
      getData: function($defer, params) {
        // 调用第一个表格的分页接口,带上ngParams的参数
        yourApiService.fetchTable1Data(params.url()).then(function(res) {
          params.total(res.totalCount); // 设置总条数用于分页计算
          $scope.table1Data = res.list; // 把结果赋值给第一个表格的专属变量
          $defer.resolve(res.list);
        });
      }
    });
    
    // 第二个表格的ngParams配置
    $scope.table2Params = ngTableParams({
      page: 1,
      count: 10,
      // 第二个表格的初始筛选参数,和第一个分开
      filter: { status: '' }
    }, {
      getData: function($defer, params) {
        yourApiService.fetchTable2Data(params.url()).then(function(res) {
          params.total(res.totalCount);
          $scope.table2Data = res.list; // 赋值给第二个表格的专属变量
          $defer.resolve(res.list);
        });
      }
    });
    
  • 第三步:模板中对应绑定各自的变量
    把模板里的循环数据源改成对应的专属变量,同时绑定各自的ngParams实例:

    <!-- 第一个分页表格 -->
    <div class="table-container">
      <table ng-table="table1Params" class="table table-striped">
        <tr ng-repeat="item in table1Data">
          <td data-title="'名称'" filter="{ name: 'text' }" sortable="'name'">
            {{ item.name }}
          </td>
          <!-- 其他列 -->
        </tr>
      </table>
    </div>
    
    <!-- 第二个分页表格 -->
    <div class="table-container">
      <table ng-table="table2Params" class="table table-striped">
        <tr ng-repeat="item in table2Data">
          <td data-title="'状态'" filter="{ status: 'select' }" sortable="'status'"
              filter-data="statusOptions">
            {{ item.status }}
          </td>
          <!-- 其他列 -->
        </tr>
      </table>
    </div>
    

额外提醒一下:如果两个表格的筛选条件也有重叠的情况,记得把筛选参数也分开(比如上面代码里的filter对象),不然切换一个表格的筛选条件,另一个也会跟着变,也是同样的共享变量问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:25:16