2014-03-24 2 views
5

현재 표 형식으로 데이터를 표시하려면 ng-grid을 사용하고 있습니다. 또한 레코드가 많은 테이블의 경우 서버 쪽 페이징을 사용하여 데이터를 가져 오려고합니다.ng-grid로 무한 스크롤을 구현하는 방법

이 솔루션에 만족하지 않습니다. 스크롤바가 창 끝에 도달하면 더 많은 데이터를 가져오고 싶습니다 (ngInfiniteScroll 지시문과 같은 것). 나는 NG 그리드로 이것을 할 수있는 방법을 찾지 못했습니다.

제 질문은 : ng-grid으로 처리 할 수 ​​있습니까? 그렇다면 어떻게 할 수 있습니까? 이 문제에 대해서는 ng-grid의 해결 방안이없는 것 같습니다.

+1

도랑 NG 그리드와 자신의 테이블에 ngInfiniteScroll을 통합? –

+0

@ Ellan Malka. 내 테이블에 ngInfiniteScroll을 통합하는 것은 확실히 방법 일 것입니다. 그러나 ng-grid의 모든 기능을 잃어 버리는 이유는 무엇입니까? – zszep

+1

Angular의 테이블은 ng-grid가 없어도 매우 쉽습니다 (내 의견으로는 더 쉽습니다). 나는 네가 그리드를 버리면서 많은 것을 잃어 버리지 않는다고 생각합니다. 특히 페이지 매김을 버리는 경우에 특히 그렇습니다. –

답변

15

사용자가 눈금의 맨 아래로 스크롤하면이 이벤트가 발생합니다. 무한/서버 측 스크롤에 유용합니다.

예 :

scope.$on('ngGridEventScroll', function() { 
    //append rows to grid 
}); 

사용이 이벤트는 사용자가 그리드에 행을 추가 할 수 있도록 사용자가 그리드의 맨 아래로 스크롤 할 때 알림을받을 수 있습니다.

리소스 : 여기https://github.com/angular-ui/ng-grid/wiki/Grid-Events

+2

와아, 나는 꾸미기에 대한 아이디어로 물건을 복잡하게 만들었다. 이것은 훨씬 더 간단하고 우아합니다. –

+0

글쎄, 전체 ng-grid api 문서를 읽고 ngGridEventScroll 이벤트를 찾지 못했습니다. 나는 확실히 이것을 시도 할 것이다. 작동한다면 왜 문서화되지 않았는지 궁금합니다. – zszep

+1

위키 페이지에 대한 자세한 정보는 https://github.com/angular-ui/ng-grid/wiki –

7

무한 스크롤 "ngGridEventScroll"이벤트를 사용하여 함께 NG-그리드의 예입니다. 필터 및 정렬 기준으로 그룹을 지원합니다.

예 : http://plnkr.co/edit/AY68jf?p=preview

// main.js 
var app = angular.module('myApp', ['ngGrid']); 
app.controller('MyCtrl', function($scope) { 

    $scope.currentDataPosition = 1; 
    $scope.lastScrollPosition = 0; 
    $scope.mySelections = []; 
    $scope.myData = [{EmployeeName:"David", Emailaddress:"[email protected]", Technology:"MVC"}, 
        {EmployeeName:"Christina", Emailaddress:"[email protected]", Technology:"MVC"}, 
        {EmployeeName:"Peter", Emailaddress:"[email protected]", Technology:".Net"}, 
        {EmployeeName:"Jhon", Emailaddress:"[email protected]", Technology:"SP"}, 
        {EmployeeName:"Michel", Emailaddress:"[email protected]", Technology:"SP"}, 
        {EmployeeName:"Mark", Emailaddress:"[email protected]", Technology:"MVC"}, 
        {EmployeeName:"Reobert",Emailaddress:"[email protected]",Technology:".Net"} 

        ]; 

    $scope.gridOptions = 
     { 
     data: 'myData', 
     columnDefs: [ 
         {field:'EmployeeName', displayName:'Employee Name' ,width:'150px'}, 
         {field:'Emailaddress', displayName:'Email Address',width:'200px'}, 
         {field:'Technology', displayName:'Technology',width:'100px'} 
        ], 
     groups :['Technology'], 
     groupsCollapsedByDefault: false, 
     showSelectionCheckbox: true, 
     selectWithCheckboxOnly: false, 
     selectedItems: $scope.mySelections, 
     //multiSelect: true, 
     //filterOptions: {filterText: '', useExternalFilter: false}, 
     //showColumnMenu: true, 
     //showFilter: true, 
     }; 

    $scope.GetMoreData = function(position) 
    { 
     if(typeof(position) == 'undefined') 
     { 
      position = 0; 
     } 
     for (var i = 1 ; i < 31 ; i++) 
     { 
      var dep = "MVC"; 

      if(i % 3 == 0) 
      { 
      dep = "Consult"; 
      } 
      else if (i % 5 == 0) 
      { 
      dep = "Audit"; 
      } 
      else if (i % 7 == 0) 
      { 
      dep = "Audit"; 
      } 
      else if (i % 4 == 0) 
      { 
      dep = ".Net"; 
      } 

      var vPos = '('+position+')-' + i; 
      var name = "Employee"+vPos; 
      var email = name + "@abccompany.com"; 
      var employee = {EmployeeName:name,Emailaddress: email,Technology:dep} 
      $scope.myData.push(employee); 
     } 
    } 


    $scope.$on('ngGridEventScroll', function() 
    { 
     var ngGridView = $scope.gridOptions.ngGrid.$viewport[0]; 
     var scrollTop = ngGridView.scrollTop; 
     var scrollOffsetHeight = ngGridView.offsetHeight; 
     var currentScroll = scrollTop + scrollOffsetHeight; 
     var scrollHeight = ngGridView.scrollHeight; 
     console.log(scrollTop); 
     console.log(scrollHeight); 

     $scope.currentDataPosition++; 
     $scope.isLoading = true; 
     $scope.GetMoreData($scope.currentDataPosition); 
     $scope.isLoading = false; 
     console.log('Scrolled .. '); 
    }); 

    $scope.GetMoreData(1);     
}); 
+0

그렇다. 마침내 Alexin Coroshin의 도움을 받아 구현했다. – zszep