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



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

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

这里有一个工作测试用例/plunker 示例,它重现了这个场景(看看浏览器控制台 - "getData 被调用......"显示两次) b.t.w 如您所见,我并没有真正使用资源来带来真实数据,只是为了演示场景,在我的真实应用程序中,我确实使用该资源来获取真实数据,并且就像在本例中一样,它被调用了两次,

提前致谢


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

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

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

当你调用params.count(...)时,你要求ng-table在你改变页面大小时刷新数据。这就是您有两个获取数据调用的原因。

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

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

谢谢@Alexander瓦西里耶夫。正如你所说,我理解我的问题。我想在这里多解释一点。实际上,对象 "params" 是 ng-table 表的对象配置,那么如果 "params" 发生了变化(例如:count 或对象的属性),ng-table 将调用函数 getData() 来刷新 table。就我而言,我想在对象"参数"中获取信息并进行更改,但我不想刷新 ng-table。我通过克隆对象"params"来完成他的对象复制的工作。使用 jQuery 克隆 JS 中的对象:

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

然后,我将处理对象结果参数而不是原始的"参数"。

最新更新