2013-05-20 6 views
11

Ich versuche angular ng-grid zu verwenden, um dynamischen Inhalt anzuzeigen. Das Raster wird 0 bis 25 Zeilen haben. Ich möchte eine Mindestgröße haben und dann muss das ng-Raster automatisch die Höhe anpassen, wenn Elemente zum Array hinzugefügt werden. Aus irgendeinem Grund stoppt die automatische Größe nach dem Hinzufügen von 6-7 Elementen (es scheint sogar von Ihrer Auflösung abhängig zu sein).AngularJS ng-Grid und ngGridFlexibleHeightPlugin funktioniert nicht so wie ich es erwarte

Kann jemand helfen? Was vermisse ich? Ich habe unten einen Plunker, der das Problem zeigt.

http://plnkr.co/edit/frHbLTQ68GjMgzC59eSZ?p=preview

+1

hilft ich in solche und andere Probleme gelaufen war und begann, einen Versuch zu beheben (siehe Gabel auf Github Zweig improve_layout https://github.com/a5sk4s/ng-grid/tree/enhance_layout) - das ist Arbeit in Arbeit und kann neue Probleme verursachen - siehe eine Gabelung von Ihrem Plunk hier: http://plnkr.co/edit/06CYAGjVURxGxDfX8wnt (einige Layout-Probleme, weil ich ng-grid.css und geändert habe kann nicht darauf verweisen) - hoffe es hilft – Andreas

+0

Danke Andreas. Ich war besorgt, dass ich das Plugin nicht korrekt oder sogar ngGrid verwendet habe. Es sieht so aus, als hätte es gerade einige Probleme. Für dieses spezielle Problem, wissen Sie, welche Elemente Sie in Ihrer Branche geändert haben? Ich kann die Änderungen lokal vornehmen, wo ich nicht denke, dass die Verwendung dieses Zweigs eine Option für mich ist. –

+0

Andreas, du link zu deinem Plünderer ist kaputt. – Rob

Antwort

0

Der Code Balg ist eine Modifikation an dem Plugin. Es funktioniert, indem die Anzahl der Elemente in den Rasterdaten überprüft und die Höhe basierend darauf berechnet wird. Die Optionen, die an das Plugin übergeben werden, sind die Höhe der Zeilen und die Kopfhöhe.

ngGridCustomFlexibleHeightPlugin = function (opts) { 
    var self = this; 
    self.grid = null; 
    self.scope = null; 
    self.init = function (scope, grid, services) { 
     self.domUtilityService = services.DomUtilityService; 
     self.grid = grid; 
     self.scope = scope; 
     var recalcHeightForData = function() { setTimeout(innerRecalcForData, 1); }; 
     var innerRecalcForData = function() { 
      var gridId = self.grid.gridId; 
      var footerPanelSel = '.' + gridId + ' .ngFooterPanel'; 
      var extraHeight = self.grid.$topPanel.height() + $(footerPanelSel).height(); 
      var naturalHeight = (grid.data.length - 1) * opts.rowHeight + opts.headerRowHeight; 
      self.grid.$viewport.css('height', (naturalHeight + 2) + 'px'); 
      self.grid.$root.css('height', (naturalHeight + extraHeight + 2) + 'px'); 
      // self.grid.refreshDomSizes(); 
      if (!self.scope.$$phase) { 
       self.scope.$apply(function() { 
        self.domUtilityService.RebuildGrid(self.scope, self.grid); 
       }); 
      } 
      else { 
       // $digest or $apply already in progress 
       self.domUtilityService.RebuildGrid(self.scope, self.grid); 
      } 
     }; 
     scope.$watch(grid.config.data, recalcHeightForData); 

    }; 
}; 
+0

funktioniert überhaupt nicht für mich: "abgefangen TypeError: Kann die Eigenschaft 'rowHeight' von undefined" nicht lesen. Originalversion funktioniert gut. – sgroves

1

Wenn Sie immer noch Probleme würde ich Vorschlag nicht das ng-Raster verwendet, und erstellen Sie Ihr Layout direkt in HTML (Verwendung DIVs, Spaltenbreite Formatierung, Stile, etc ...). Füllen Sie dann Ihr neues Layout mit Ihrem $ scope aus. Zwischen Variablen, Modellen und ng-repeat sollten Sie alles tun können, was Sie brauchen.

0

Ich finde mit diesem Stück Code auf dem Stylesheet mein Problem gelöst. Ich habe das Plugin deaktiviert, aber es funktioniert so oder so.

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

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

Ich hoffe, dass es jemand

Verwandte Themen