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
相关产品推荐
相关产品推荐

