4

由于某种原因,当getData使用角度资源带来数据时,它被调用了两次,导致资源也执行两次 REST 请求 <--- 糟糕...

知道为什么以及如何解决它吗?

这是一个重新创建此场景的工作测试用例/plunker示例(查看浏览器控制台-“getData 被调用....”显示两次)顺便说一句,您可以看到我并没有真正使用该资源来带来真实数据,只是为了演示场景,在我的真实应用程序中,我确实使用该资源来带来真实数据,并且就像在这个例子中一样,它被调用了两次,

提前谢谢


在查看 ng-table 的 src 后,我注意到以下内容

$scope.$watch('params.$params', function(params) {
    $scope.params.settings().$scope = $scope;
    $scope.params.reload();
}, true);

这意味着表格将其称为“getData”,count/filter/group/groupBy/page/sorting 这解释了我所看到的行为。

4

3 回答 3

11

当您调用 params.count(...) 时,您会要求 ng-table 在更改页面大小时刷新数据。这就是为什么你有两个 get-data 调用。

如果您不想进行分页,则删除调用 params.count 和 params.total。如果您需要分页,则设置页面大小并且不要在 getData 中更改它。

于 2014-03-03T07:38:52.133 回答
0

这件事发生在我身上,原因很奇怪。getData 仅在初始化(第一次加载)时被调用两次。更改页面或排序没有调用 getData 两次。原因是在初始化时,ng-table 指令隐藏在模板文件中。

于 2016-12-20T09:09:50.080 回答
0

感谢@Alexander Vasilyev。正如你所说,我理解了我的问题。我想在这里多解释一点。实际上,对象“params”是表ng-table的对象配置,那么如果“params”改变(例如:计数或对象的属性),ng-table会调用函数getData()来刷新表。就我而言,我想在对象“params”中获取信息并更改它,但我不想刷新 ng-table。我通过克隆对象“params”和他的对象复制来做到这一点。使用 jQuery 克隆 JS 中的对象:

var resultParams = jQuery.extend(true, {}, params.$params);

然后,我将处理对象 resultParams 而不是原来的“params”。

于 2017-04-05T08:38:18.850 回答