2016-03-18 4 views
0

Итак, я разрабатываю это приложение, в котором я хочу применить разбиение на страницы на список шаблонов.Pagination не работает в AngularJS

объекты шаблона хранятся в списке.

Я показываю миниатюры шаблонов на странице, и я хочу применить разбивку на страницы для этой страницы.

До сих пор я пробовал следующее решение, но оно не сработало.

Он отображает правильную разбивку на страницы, но когда я нажимаю на ссылку, это не обновляет содержимое страницы.

list.html

<div class="container"> 
    <div class="homepage-header"> 
     <h2 class="homepage-title text-center wow fadeInDown animated" style="visibility: visible; animation-name: fadeInDown; -webkit-animation-name: fadeInDown;"> TEMPLATES </h2> 
    </div> 

    <div class="row"> 
     <div class="col-md-6 col-sm-6" style="text-align: left"> 
      <div class="form-inline"> 
       <div class="form-group has-feedback has-clear"> 
        <input type="text" class="form-control" ng-model="searchParam" ng-model-options="{ debounce: 400 }" placeholder="Search template ..." 
        /> 
        <a class="glyphicon glyphicon-remove-sign form-control-feedback form-control-clear" ng-click="searchParam = ''; 
         retreivePageData(0);" ng-show="searchParam" style="pointer-events: auto; "></a> 
       </div> 
      </div> 
     </div> 
     <div class="col-md-6 col-sm-6" style="text-align: right; vertical-align: middle; padding-right: 30px;"> 
      <div class="form-inline"> 
       {{selectedOption}} 

        <i class="fa fa-toggle-on fa-2x active" ng-if="status == true" ng-click="changeStatus();" title="Show component based templates"></i> 
        <i class="fa fa-toggle-on fa-2x fa-rotate-180 inactive" ng-if="status == false" ng-click="changeStatus();" title="Show image based templates"></i> 


       &nbsp;&nbsp;<button ng-click="newTemplateConfig()" class="btn btn-primary btn-xs" title="Add new template"><i class="fa fa-plus-circle fa-fw"></i>New Template</button> 

      </div> 
     </div> 
    </div> 

    <div class="homepage-ui-showcase-2-css row wow zoomIn animated" style="height: 402px;padding: 5px 0px; visibility: visible; animation-name: zoomIn; -webkit-animation-name: zoomIn;"> 
     <div ng-repeat="(templateIndex, templateModel) in templatesList | filter:searchParam | limitTo: itemsPerPage"> 
      <div class="active col-md-3 col-lg-3 col-sm-6 col-xs-12 mix design painting" style="display: inline-block;padding-top: 10px;" 
      ng-init="visible=false" ng-mouseover="visible=true" ng-mouseleave="visible=false"> 
       <div class="portfolio-item shadow-effect-1 boxShadow" style="max-width: 250px;padding:0.3px;border:2px dotted #bebede;cursor: pointer"> 
        <div class="mainBadge"> 
         <kbd>{{templateModel.badge}}</kbd> 
        </div> 
        <div ng-switch on="{{templateModel.type !== undefined && templateModel.type === 'Annotate'}}"> 
         <div ng-switch-when="false" style="height: 130px;" ui-sref="/designer/:pageId({pageId:templateModel.id})" class="portfolio-img "> 
          <i style="opacity:0.4;padding-top:35px;padding-left:15px;margin-left: 30%;" class="fa fa-puzzle-piece fa-4x"></i> 
         </div> 
         <div ng-switch-when="true" style="height: 130px;" ui-sref="annotator/:annotatedTemplateId({annotatedTemplateId:templateModel.id})" 
         class="portfolio-img "> 
          <i style="opacity:0.4;padding-top:35px;padding-left:15px;margin-left: 30%;" class="fa fa-file-image-o fa-4x"></i> 
         </div> 
        </div> 

        <div class="portfolio-item-content" title="{{templateModel.name}}"> 
         <h3 class="header" style="font-size: 13px;text-align: center;display:inline;"> 
          {{templateModel.name}} 
         </h3> 
         <small class="pull-right" ng-show="visible" style="display: inline; padding-top: 4px"> 
          <div ng-switch on="{{templateModel.type !== undefined && templateModel.type === 'Annotate'}}"> 
           <div ng-switch-when="true" href="#" class="btn btn-xs btn-danger" title="Generate Communication" 
           ui-sref="generateCommunication({mode:'A',id: templateModel.id})" 
           ng-disabled="!templateModel.dynamic_entity"> <!--style="color:#9d9d9;"--> 
            <i class="fa fa-file-pdf-o"></i> 
           </div> 
           <div ng-switch-when="false" href="#" class="btn btn-xs btn-danger" title="Generate Communication" 
           ui-sref="generateCommunication({mode:'T',id: templateModel.id})" 
           ng-disabled="!templateModel.dynamic_entity"> <!--style="color:#9d9d9;"--> 
            <i class="fa fa-file-pdf-o"></i> 
           </div> 
          </div> 
         </small> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
    <div class="row " style="margin-top: 10px; padding-top:0px;"> 
     <div class="pagination-div pull-right" style="">    
      <!--<pagination class="pull-right" total-items="templatesList.length" ng-model="currentPage" max-size="maxSize" items-per-page="itemsPerPage"></pagination> -->    
      <uib-pagination total-items="templatesList.length" ng-model="currentPage" ng-change="pageChanged()" max-size="maxSize" class="pagination-sm" items-per-page="itemsPerPage" boundary-link-numbers="true"></uib-pagination> 
     </div> 
    </div> 

</div> 

list.controller.js

'use strict'; 

angular.module('rapid').controller('HomeListController', 
    function($scope, $rootScope, $window, $modal, ServiceFactory, toaster, ReadFileService, AnnotationService, AnnotateService, DocumentService) { 

     $scope.templatesList = []; 
     $scope.selectedOption = 'All'; 
     $scope.annotateTemplateMeta = []; 
     $scope.rapidTemplateMeta = []; 
     $scope.maxSize = 5; 

     $scope.init = function() { 
      $scope.status = true; 
      $scope.selectedOption = "Image Based"; 
      $scope.retrieveTemplates($scope.status); 
      $scope.currentPage = 1; 
     }; 

     $scope.changeStatus = function(){ 
      $scope.status = !$scope.status; 
      $scope.retrieveTemplates($scope.status); 
     }; 

     $scope.retrieveTemplates = function(selectedOption) { 
      $scope.templatesList = []; 

      if(selectedOption) { 
       $scope.selectedOption = "Image Based"; 
       $scope.fetchAnnotationTemplates("Annotate"); 
      } else { 
       $scope.selectedOption = "Component Based"; 
       $scope.fetchRapidTemplates("Rapid"); 
      } 
     }; 

     $scope.fetchAnnotationTemplates = function(selectedOption) { 
      AnnotateService.get().$promise.then(function(result) { 
       $scope.annotateTemplateMeta = result[0]; 
       console.log('Annotated template count :: ' + result[0].length); 
       if (selectedOption === 'All') { 
        $scope.fetchRapidTemplates(selectedOption); 
       } else { 
        $scope.prepareTemplateList(selectedOption); 
       } 
      }); 
     }; 

     $scope.fetchRapidTemplates = function(selectedOption) { 
      ServiceFactory.PagesService.getAllPages().$promise.then(function(result) { 
       $scope.rapidTemplateMeta = result[0]; 
       console.log('Rapid template count :: ' + result[0].length); 
       $scope.prepareTemplateList(selectedOption); 
      }); 
     }; 

     $scope.prepareTemplateList = function(selectedOption) { 
      $scope.itemsPerPage = 1; 
      var getPaginatedTemplateList = 'getList'; 
      $scope.currentPage = 0; 
      if (selectedOption === 'Annotate') { 
       $scope.annotateTemplateMeta.forEach(function(annotate) { 
        var templateObject = {}; 
        templateObject = { id: annotate.id, name: annotate.name, type: "Annotate", dynamic_entity:annotate.dynamic_entity, badge:"Image Based" }; 
        $scope.templatesList.push(templateObject); 
       }); 

      } else if (selectedOption === 'Rapid') { 
       $scope.rapidTemplateMeta.forEach(function(rapidTemplate) { 
        var templateObject = {}; 
        templateObject = { id: rapidTemplate._id, name: rapidTemplate.name, type: "Component", dynamic_entity:rapidTemplate.pageObj.entity, badge:"Component Based" }; 
        $scope.templatesList.push(templateObject); 
       }); 
       //alert('Rapid count '+selectedOption + $rootScope.rapidTemplateMeta.length); 
      } else { 
       $scope.annotateTemplateMeta.forEach(function(annotate) { 
        var templateObject = {}; 
        templateObject = { id: annotate.id, name: annotate.name, type: "Annotate", dynamic_entity:annotate.dynamic_entity, badge:"Image Based" }; 
        $scope.templatesList.push(templateObject); 
       }); 
       $scope.rapidTemplateMeta.forEach(function(rapidTemplate) { 
        var templateObject = {}; 
        templateObject = { id: rapidTemplate._id, name: rapidTemplate.name, type: "Component", dynamic_entity:rapidTemplate.pageObj.entity, badge:"Component Based" }; 
        $scope.templatesList.push(templateObject); 
       }); 

       $scope.totalItems = $scope.templatesList.length; 
       $scope.maxSize = 5; 
      } 
      //$scope.retreivePageData(0); 


     }; 

     $scope.setPage = function(pageNo) { 
      $scope.currentPage = pageNo; 
     }; 


     $scope.pageChanged = function() { 
      alert('Page changed to: ' + $scope.currentPage); 

      }); 
     }; 




     $scope.newTemplateConfig = function (size) { 
       var modalInstance = $modal.open({ 
        backdrop: 'static', 
        keyboard: false, 
        animation: $scope.animationsEnabled, 
        templateUrl: 'scripts/app/home/modal/template.modal.html', 
        controller: 'TemplateModalCtrl', 
        size: size, 
        resolve: {templateModel: function() { 
          return null; 
         }, 
         title: function() { 
          return 'Create New Template'; 
         }, 
         templateType: function() { 
          if($scope.status) { 
           return 'Annotate'; 
          } else { 
           return 'Rapid' 
          } 
         } 
        } 
       }); 
       modalInstance.result.then(function (saveAnnotatedTemplateConfig) { 
        alert('modal result') 
        //$scope.saveAnnotatedTemplateConfig(saveAnnotatedTemplateConfig.templateConfigModel); 
       }, function() { 
        console.log('Modal dismissed at: ' + new Date()); 
       }); 
      }; 


     $scope.init(); 

    }); 

Что случилось с моим кодом?

Просьба указать некоторые данные по этому вопросу.

+0

почему бы не использовать UI-сетки? http://ui-grid.info/ –

+0

@VinoDang можете ли вы предоставить какие-либо данные о том, как это использовать? –

ответ

1

Вы можете использовать директиву ui-grid, чтобы решить проблему с разбивкой по страницам.

Обратитесь к ui-grid API.

Checkout эти 2 plunkers:

  1. Plunker 1

  2. Plunker 2

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