2016-01-04 3 views
0

У меня довольно сложная ситуация, когда я вызываю данные из API, которые потенциально имеют сотни или даже тысячи результатов. Он включает в себя варианты разбивки на страницы, которые я могу вызвать.Угловой http получить от ng-click

Мне нужно разбить список результатов на страницы, используя данные API.

Страница изначально загружена $scope.displayData = function (url, page, limit) и вызвана с $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. Однако отображаемые данные не прослеживается, если ссылка пагинация щелкают и ничего не возвращается. никаких ошибок консоли.

Я перепутал свои области или что-то еще? Или я просто собираюсь все это неправильно?

Любая помощь будет высоко оценена.

+0

Вы не 'element.append ('')' в Угловом. Вы делаете это в jQuery. В Angular вы пишете HTML в представлении и показываете/скрываете/генерируете его при условии или с помощью ng-repeat. –

+0

Вы должны иметь 'ng-repeat' вместо element.append. – Iamisti

ответ

1

Да, вы немного смешиваете разные вещи. Это будет выглядеть намного лучше, таким образом:

app.directive ('paginationList', function($timeout) { 
return { 
    replace: true 
    restrict: 'E', 
    templateUrl: 'view/paginationList.html', 
    link: function(scope, element) { 
     var linkToMyData = 'linktomydata?'; 

     //using underscore's 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> 
+0

Спасибо за ответ и более чистый подход @lamisti. Извинения, но я должен был упомянуть, что scope.pagination.pages не содержит массив или объект данных, а просто значение 15, где предел страницы составляет 20 из 298 общих записей. Будет ли это по-прежнему работать в вашем решении, потому что именно поэтому я выполнял цикл for изначально. Также я считаю, что фактическая функциональность в области scope.displayData должна оставаться в контроллере. Большое спасибо –

+0

Я обновил свой пример в соответствии с вашими требованиями. Он должен работать таким образом. – Iamisti

+0

Еще раз спасибо @lamisti. После небольшой настройки я получил эту работу с вашим решением. Я должен включить библиотеку http://underscorejs.org/, чтобы заставить _.range работать. Также мне не пришлось использовать функцию displayData в директиве, как это было в контроллере для меня. Приняли немного времени, но все работало. Еще раз спасибо! Ответ принят :) –

Смежные вопросы