У меня довольно сложная ситуация, когда я вызываю данные из API, которые потенциально имеют сотни или даже тысячи результатов. Он включает в себя варианты разбивки на страницы, которые я могу вызвать.
Мне нужно разбить список результатов на страницы, используя данные API.
Страница изначально загружается с помощью $scope.displayData = function (url, page, limit)
и $scope.displayData("linktomydata?", 1, 20);
с $scope.displayData("linktomydata?", 1, 20);
которые возвращают что-то вроде linktomydata?page=1&limit=20
из моего контроллера. Это отображает записи для данных в порядке.
Однако у меня есть директива, чтобы получить общее количество возможных страниц на основе лимита в 20 на страницу, и я использую простой цикл для создания списка ссылок под данными, которые служат для разбивки на страницы. Затем для каждой ссылки назначается функция displayData с соответствующими параметрами.
app.directive ('paginationList', function($timeout) {
return {
// Set as a replaceable element
restrict: 'E',
link: function(scope, element) {
$timeout(function () {
scope.$watch('pagination', function(pagination) {
if(pagination) {
for (var i = 1; i < scope.pagination.pages + 1; i++) {
element.append('<a href ng-click="displayData("linktomydata?", 6, 20)"></li>' + i + '</li></a>');
};
}
});
})
}
}
});
Это должно отобразить страницу 6 доступных данных и по-прежнему ограничено до 20. Однако отображаемые данные пропадают, когда щелкнута ссылка на страницы и ничего не возвращается. никаких ошибок консоли.
Я перепутал свои области или что-то еще? Или я просто собираюсь все это неправильно?
Любая помощь приветствуется.
Да, вы немного смешиваете разные вещи. Это выглядело бы намного лучше:
app.directive ('paginationList', function($timeout) {
return {
replace: true
restrict: 'E',
templateUrl: 'view/paginationList.html',
link: function(scope, element) {
var linkToMyData = 'linktomydata?';
//using underscore range method is the easiest way
$scope.range = _.range;
scope.displayData = function(page, limit){
//do the magic here
}
}
}
});
шаблон:
<div>
<li ng-repeat="page in range(1,pagination.pages)">
<a href ng-click="displayData(page, 20)">
</li>
</div>
Применение:
<pagination-list></pagination-list>
element.append('<html>')
в Angular. Вы делаете это в JQuery. В Angular вы пишете HTML в виде и показываете / скрываете / генерируете его при условии или с помощью ng-repeat.ng-repeat
вместо element.append.