Я пытаюсь выяснить, как получить количество всех элементов в коллекции от сервера, чтобы передать это число в total-items
, чтобы я мог перемещаться между всеми данными, а не только с первой страницей элементов.
Мой код контроллера AngularJS -
$scope.gamesPerPage = 5;
$scope.currentPage = 1;
$scope.totalGames = 0;
getResultsPage($scope.currentPage, $scope.gamesPerPage);
$scope.pageChanged = function (pageNumber, pageSize) {
getResultsPage(pageNumber, pageSize);
};
function getResultsPage(pageNumber, pageSize) {
gamesFactory.getGames(pageNumber, pageSize)
.success(function (response) {
$scope.games = response;
$scope.totalGames = response.Count; //Returns the number of PagedList elements, 5 in my case
})
};
Заводское обслуживание -
var urlBase = '/api/games/';
factory.getGames = function (pageNumber, pageSize) {
return $http.get(urlBase + pageNumber + '/' + pageSize);
};
И Web APi 2, метод Get -
[Route("api/games/{pageNumber}/{pageSize}")]
public IQueryable<Game> GetGames(int pageNumber, int pageSize)
{
List<Game> games = db.Games.ToList();
PagedList<Game> pagedList = new PagedList<Game>(games, pageNumber, pageSize);
return pagedList.AsQueryable();
}
Вы можете обернуть свой ответ в объект, который будет содержать общее количество игр и выложенную подборку игр.
Вы могли бы сделать что-то вроде этого:
public class GamesHolder
{
public int TotalCount { get; set; }
public IEnumerable<Game> PagedGames { get; set; }
}
Следовательно, ваша API-точка должна вернуться:
[Route("api/games/{pageNumber}/{pageSize}")]
public GamesHolder GetGames(int pageNumber, int pageSize)
{
List<Game> games = db.Games.ToList();
return new GamesHolder()
{
TotalCount = games.Count,
PagedGames = new PagedList<Game>(games, pageNumber, pageSize)
}
}
Кроме того, внутри вашей функции Angular getResultsPage
вы сможете получить объект:
function getResultsPage(pageNumber, pageSize) {
gamesFactory.getGames(pageNumber, pageSize)
.success(function (response) {
$scope.games = response.pagedGames;
$scope.totalGames = response.totalCount;
})
};