2014-04-30 20 views
18

मैं कैसे ऑटो के लिए एनजी ग्रिड पेज आकार के आधार पर आकार बदलने मिलता है उसकी ऊंचाई? एनजी-ग्रिड की साइट पर प्रलेखन एक निश्चित ऊंचाई का उपयोग करता है। सबसे अच्छा समाधान मैंने देखा है इस link से आता है:एनजी ग्रिड ऑटो/गतिशील ऊंचाई

.ngViewport.ng-scope { 
    height: auto !important; 
    overflow-y: hidden; 
} 

.ngTopPanel.ng-scope, .ngHeaderContainer { 
    width: auto !important; 
} 

यह सर्वर साइड पृष्ठन के साथ काम नहीं करता। मैंने सर्वर-साइड पेजिंग उदाहरण को एनजी-ग्रिड की साइट से कॉपी किया है, और उपरोक्त सीएसएस को लागू किया है, लेकिन जैसा कि आप देख सकते हैं, केवल पहली 6 पंक्तियां दिखायी जाती हैं: http://plnkr.co/edit/d9t5JvebRjUxZoHNqD7K?p=preview

और {ऊंचाई: 100%} नहीं काम ...

उत्तर

31

आप एनजी-ग्रिड Flexible Height Plugin का उपयोग करने का प्रयास कर सकते हैं, आपको केवल इतना करना है कि प्लगइन संपत्ति में ग्रिड विकल्पों में प्लगइन जोड़ें और वह बाकी का ख्याल रखेगा।

उदाहरण:

$scope.gridOptions = { 
    data: 'myData', 
    enablePaging: true, 
    showFooter: true, 
    totalServerItems: 'totalServerItems', 
    pagingOptions: $scope.pagingOptions, 
    filterOptions: $scope.filterOptions, 
    plugins: [new ngGridFlexibleHeightPlugin()] 
}; 

लाइव उदाहरण:। http://plnkr.co/edit/zNHhsEVqmpQmFWrJV1KQ?p=preview

+1

सहमत, के लिए पूरी तरह से काम किया मुझे। प्लगइन तब से चले गए क्योंकि 'मास्टर' अब '3.x' है इसलिए मैंने उत्तर में यूआरएल अपडेट किया। –

+1

यूई-ग्रिड - v3.0.0-rc.16 के साथ काम नहीं कर रहा है, क्या इसके लिए कोई कामकाज है? –

+0

@ साजिद अली, जहां तक ​​मुझे पता है, ui-grid पहले से ही गतिशील ऊंचाई के लिए एक समर्थन है। –

0

$ ("। GridStyle") सीएसएस ("ऊंचाई", "");

.. अपने gridstyle वर्ग तो स्वत: गतिशील अपने एनजी ग्रिड पर सेट ऊंचाई में अपनी ऊंचाई संपत्ति को दूर

4

आप किसी भी प्लगइन्स एक आसान समाधान जोड़ने के लिए गतिशील रूप से तालिका के बदलने के लिए मैं क्रियान्वित किया है नहीं करना चाहते हैं दृश्य पंक्तियों के आधार पर सख्ती से ऊंचाई। मैं यू-ग्रिड-अस्थिर v3.0 का उपयोग कर रहा हूं। सीएसएस को छूने की जरूरत नहीं है।

मेरे एचटीएमएल लगता है:

<div id="grid1" ui-grid="gridOptions" ui-grid-grouping ui-grid-exporter class="grid"></div> 

अपने नियंत्रक ऐड में:

$scope.$watch('gridApi.core.getVisibleRows().length', function() { 
    if ($scope.gridApi) { 
     $scope.gridApi.core.refresh(); 
     var row_height = 30; 
     var header_height = 31; 
     var height = row_height * $scope.gridApi.core.getVisibleRows().length + header_height; 
     $('.grid').height(height); 
     $scope.gridApi.grid.handleWindowResize(); 
    } 
}); 

और निम्न पंक्ति जहां gridOptions आरंभ नहीं हो जाता जोड़ने स्क्रॉल बंद करने के लिए:

enableVerticalScrollbar : uiGridConstants.scrollbars.NEVER, 

मेक सुनिश्चित करें कि uiGridConstants अपने नियंत्रक में पारित कर दिया गया है:

angular.module('app').controller('mainController', function($scope, uiGridConstants) { ... 

आशा इस मदद करता है!

+0

10x 4 '$ scope.gridApi.core.refresh()' && 'scope.gridApi.grid.handleWindowResize()' =) सहायक .. – oCcSking

0

आप इस तरह ऑटो शैली कुछ जोड़ सकते हैं:

ng-style="{ 'height': myData.length*34 }", और myData

0

मैं कोड के इस टुकड़े का उपयोग कर पाते हैं स्टाइलशीट मेरी समस्या हल पर है। मैंने प्लगइन को अक्षम कर दिया लेकिन यह किसी भी तरह से काम करता है।

.ngViewport.ng-scope{ 
    height: auto !important; 
    overflow-y: hidden; 
} 

.ngTopPanel.ng-scope, .ngHeaderContainer{ 
    width: auto !important; 
} 
.ngGrid{ 
    background-color: transparent!important; 
} 

मुझे उम्मीद है कि यह किसी की मदद करेगा!

0

पद्धति जहां आप, प्रत्येक ग्रिड के भीतर प्रत्येक पंक्ति के लिए डाटा स्टोर करने के लिए एक अलग सरणी में ग्रिड की अवधि की गणना और विभिन्न सरणी कि गणना की लंबाई बढ़ाने के लिए एक कोड जोड़ने की कोशिश कर रहे हैं। सुनिश्चित करें कि ग्रिड और सरणी के सूचकांक की अनुक्रमणिका समान होनी चाहिए, ताकि हम इसे यूआई से एक साथ एक्सेस कर सकें।मेरे दृष्टिकोण इस प्रकार थी:

    //Stores the calculated height of each grid. 
        $scope.gridHeights = []; 


        //Returns the height of the grid based on the 'id' passed from the UI side. 
        //Returns the calculated height appended with 'px' to the HTML/UI 
        $scope.getHeight = function(id){ 
         if($scope.gridHeights[id]) { 
          return { 
           'height': $scope.gridHeights[id] + 'px' 
          }; 
         }else{ 
          return { 
           'height': '300px' 
          }; 
         } 
        }; 


        for (var idx = 0; idx < $scope.auditData.length; idx++) { 

         //gets the rows for which audit trail/s has to be displayed based on single or multi order. 
         $scope.gridData[idx] = $scope.auditData[idx].omorderAuditTrailItems; 

         //Calculates and pushes the height for each grid in Audit Trail tab. 
         $scope.gridHeights.push(($scope.auditData[idx].omorderAuditTrailItems.length + 2)*30); 


     //IN HTML, set the height of grid as : 
     <div id='orderAuditTrailList'> 
      <div class="row fits-auditTrail" ng-style="getHeight(id)"> 
       <div class="fits-ng-grid" ng-if="auditTrail.omorderAuditTrailItems.length>0" ng-grid="gridOrderAuditTrailList[id]" ng-style="getHeight(id)"></div> 
      </div> 
    </div> 
1

मुझे लगता है कि मैं पूरी तरह से 48 घंटे के बाद इस समस्या का समाधान,

var app = angular.module('app', ['ngTouch', 'ui.grid', 'ui.grid.pagination', 'ui.grid.autoResize']); 
 

 
app.controller('MainCtrl', ['$scope', '$http', '$interval', function($scope, $http, $interval) { 
 

 
    var paginationOptions = { 
 
    pageNumber: 1, 
 
    pageSize: 20, 
 
    }; 
 
    $scope.currentPage = 1; 
 
    $scope.pageSize = paginationOptions.pageSize; 
 
    $scope.gridOptions = { 
 
    rowHeight: 30, 
 
    enableSorting: true, 
 
    paginationPageSizes: [$scope.pageSize, $scope.pageSize * 2, $scope.pageSize * 3], 
 
    paginationPageSize: paginationOptions.pageSize, 
 
    columnDefs: [{ 
 
     name: 'name' 
 
    }, { 
 
     name: 'gender', 
 
     enableSorting: false 
 
    }, { 
 
     name: 'company', 
 
     enableSorting: false 
 
    }], 
 
    onRegisterApi: function(gridApi) { 
 
     $scope.gridApi = gridApi; 
 
     gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) { 
 
     paginationOptions.pageNumber = newPage; 
 
     paginationOptions.pageSize = pageSize; 
 
     $scope.pageSize = pageSize; 
 
     $scope.currentPage = newPage; 
 
     $scope.totalPage = Math.ceil($scope.gridOptions.totalItems/$scope.pageSize); 
 
     }); 
 
    } 
 
    }; 
 

 
    var loadData = function() { 
 
    var url = 'https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/100.json'; 
 
    $http.get(url) 
 
     .success(function(data) { 
 
     $scope.gridOptions.totalItems = data.length; 
 
     $scope.totalPage = Math.ceil($scope.gridOptions.totalItems/$scope.pageSize); 
 
     $scope.gridOptions.data = data; 
 
     }); 
 
    }; 
 

 
    loadData(); 
 

 
    // for resize grid's height 
 
    $scope.tableHeight = 'height: 600px'; 
 

 
    function getTableHeight(totalPage, currentPage, pageSize, dataLen) { 
 
    var rowHeight = 30; // row height 
 
    var headerHeight = 50; // header height 
 
    var footerHeight = 60; // bottom scroll bar height 
 
    var totalH = 0; 
 
    if (totalPage > 1) { 
 
     // console.log('hehehehe'); 
 
     if (currentPage < totalPage) { 
 
     totalH = pageSize * rowHeight + headerHeight + footerHeight; 
 
     } else { 
 
     var lastPageSize = dataLen % pageSize; 
 
     // console.log(lastPageSize); 
 
     if (lastPageSize === 0) { 
 
      totalH = pageSize * rowHeight + headerHeight + footerHeight; 
 
     } else { 
 
      totalH = lastPageSize * rowHeight + headerHeight + footerHeight; 
 
     } 
 
     } 
 
     console.log(totalH); 
 
    } else { 
 
     totalH = dataLen * rowHeight + headerHeight + footerHeight; 
 
    } 
 
    return 'height: ' + (totalH) + 'px'; 
 
    } 
 

 
    $interval(function() { 
 
    $scope.tableHeight = getTableHeight($scope.totalPage, 
 
     $scope.currentPage, $scope.pageSize, 
 
     $scope.gridOptions.data.length); 
 
    console.log($scope.tableHeight); 
 
    $scope.gridApi.grid.handleWindowResize(); 
 
    $scope.gridApi.core.refresh(); 
 
    }, 200); 
 

 

 
}]);
.grid { 
 
    width: 600px; 
 
}
<!doctype html> 
 
<html ng-app="app"> 
 

 
<head> 
 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script> 
 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-touch.js"></script> 
 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-animate.js"></script> 
 
    <script src="http://ui-grid.info/docs/grunt-scripts/csv.js"></script> 
 
    <script src="http://ui-grid.info/docs/grunt-scripts/pdfmake.js"></script> 
 
    <script src="http://ui-grid.info/docs/grunt-scripts/vfs_fonts.js"></script> 
 
    <script src="http://ui-grid.info/release/ui-grid.js"></script> 
 
    <link rel="stylesheet" href="http://ui-grid.info/release/ui-grid.css" type="text/css"> 
 
    <link rel="stylesheet" href="main.css" type="text/css"> 
 
</head> 
 

 
<body> 
 

 
    <div ng-controller="MainCtrl"> 
 
    <div ui-grid="gridOptions" ui-grid-pagination id="grid" style="{{tableHeight}}"></div> 
 
    <div> 
 
     <p>Current Page: {{ currentPage }}</p> 
 
     <p>Total Page: {{ totalPage }}</p> 
 
     <p>Page Size: {{ pageSize }}</p> 
 
     <p>Table Height: {{tableHeight}}</p> 
 
    </div> 
 
    </div> 
 

 

 
    <script src="app.js"></script> 
 
</body> 
 

 
</html>

भी देखें Plunker: http://plnkr.co/edit/np6y6rgN1ThnT0ZqyJeo?p=preview

संबंधित मुद्दे