我的代码是
ORDER BY LastPacketTime DESC, TrackID DESC
如果我这样做,那很好。但那是因为我对$scope.loadQuestions = function() {
$scope.questionCount = 0;
$scope.questionTable = new NgTableParams({
count: []
}, {
total: 19387,
getData: function($defer, params) {
$scope.filter.sort = params.orderBy();
$scope.filter.page = params.page();
return $http.get("/api/questions", {
params: $scope.filter
}).then(function(response) {
$scope.questionCount = response.data.count;
return response.data.questions;
});
}
});
};
进行了硬编码,这显然没有意义。如果我做
total
然后由于某种原因 return $http.get("/api/questions", {
params: $scope.filter
}).then(function(response) {
params.total(response.data.count);
$scope.questionCount = response.data.count;
return response.data.questions;
});
两次触发ng-table
请求。那么正确的做法是什么?
答案 0 :(得分:0)
我不确定下面是否可以解决您的问题,但我确实使用下面的代码并且它不会导致双重调用问题
getData: function ($defer, params) {
if (timeout) $timeout.cancel(timeout);
timeout = $timeout(function () {
callback().then(function (data) {
params.total(data.TotalCount);
$defer.resolve(data.PageData);
});
}, 700);
}
注意:上面粘贴的代码是指令的一部分,$ timeout部分是为了避免多次调用(限制)而callback()
执行实际的$ http调用。
从这里开始的重要部分可能是:$defer.resolve(data.PageData)
正在为我做这个伎俩
还有没有return
声明,就像你的情况一样。
答案 1 :(得分:0)
假设您使用的是ng-table
脚本的旧版本之一,第一步是从您的api服务获取数据,然后初始化您想要的ng-table
参数
使用$http
服务,如果请求成功,您将只获得一次数据,并在该服务内部初始化您的 ngTableParams 。因此,您将避免多次回调的问题。
另请注意 getData 部分中的更改如何通过分页解决排序和过滤。
以下是我用于项目的解决方案,希望它有所帮助。
$http.get('/api/questions').success(function (data) {
$scope.questionTable = new ngTableParams({
page: 1,
count: 10
},
{
total: data.length,
getData: function ($defer, params) {
var filteredData = params.filter() ? $filter('filter')(data, params.filter()) : data;
var orderedData = params.sorting() ? $filter('orderBy')(filteredData, params.orderBy()) : data;
params.total(orderedData.length);
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
});