ng-table,getData不止一次调用,为什么?

时间:2014-03-03 07:13:00

标签: angularjs ngtable

出于某种原因,getData使用角度资源来将数据调用两次,导致资源再次执行REST请求两次< --- bad ...

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

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

提前致谢


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

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

这意味着表格在count/filter/group/groupBy/page/sorting上称之为'getData' 这解释了我所看到的行为。

3 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

感谢@Alexander Vasilyev。正如你所说,我理解我的问题。我想在这里解释一下。事实上,对象" params"是表格ng-table的对象配置,然后是" params"更改(例如:count或对象的属性),ng-table将调用函数getData()来刷新表。 就我而言,我希望获得对象中的信息" params"并改变它但我不想刷新ng-table。我是通过克隆对象" params" et work他的对象被复制了。用jQuery克隆JS中的对象:

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

然后,我将处理对象resultParams而不是" params"原始