Ich benutzte Kumar Vorschlag sehen und erstellt zwei Tabellen. Einer enthält die Thead und der andere enthält Thead und Tbody.
<div ng-style="{'margin-right': scrollBarWidth}">
<table>
<thead>
<tr>
<th width="{{tableSizes[0].width}}">Col0</th>
<th width="{{tableSizes[1].width}}">Col1</th>
<th width="{{tableSizes[2].width}}">Col2</th>
</tr>
</thead>
</table>
</div>
<div class="fixedHeadBody">
<table ng-style="{'margin-top': -rowSize.height}">
<thead>
<tr el-size="rowSize">
<th el-size="{{tableSizes[0].width}}">Col0</th>
<th el-size="{{tableSizes[1].width}}">Col1</th>
<th el-size="{{tableSizes[2].width}}">Col2</th>
</tr>
</thead>
<tbody>
<!-- data goes here -->
</tbody>
</table>
</div>
Im Thead der zweiten, fügte ich eine Richtlinie (siehe unten), dass die Breite und die Höhe jeder Säule beobachtet. Die Ausgabe dieser Spalten wird verwendet, um die Breite des ersten Themas (Winkelbindung) festzulegen. Ich habe auch die selbe Direktive zu dem Pfad der zweiten Tabelle hinzugefügt und benutze den Wert height, um den scrollbaren Pfad der zweiten Tabelle auszublenden. Auf diese Weise zeige ich nur das erste Thead welches fest ist.
Eine weitere Sache, die ich aussortieren musste, war die ScrollBar. Die Bildlaufleiste benötigt Platz und richtet die Spalten zwischen der ersten und der zweiten Tabelle falsch aus. Um dies zu beheben, habe ich der oberen Tabelle einen Rand rechts hinzugefügt, der der Breite der Bildlaufleiste entspricht (der Unterschied der Breite zwischen dem div, der die Tabelle enthält, und der Tabelle). Die Breite der Bildlaufleiste variiert zwischen den Browsern und die letzte Funktion funktioniert für jeden Browser.
app.directive('elSize', ['$parse', '$timeout', function ($parse, $timeout) {
return function(scope, elem, attrs) {
var fn = $parse(attrs.elSize);
scope.$watch(function() {
return { width: elem.innerWidth(), height: elem.innerHeight() };
},
function (size) {
fn.assign(scope, size);
}, true);
}
}])
Im Controller können Sie die scrollBarWidth mit der Funktion unten gesetzt. Sie können $ scope.setScrollBarWidth() von überall aufrufen, sobald die Tabelle gerendert wurde.
$scope.scrollBarWidth = "5px";
$scope.setScrollBarWidth = function() {
$timeout(function() {
var divWidth = $(".fixedHeadBody").width();
var tableWidth = $(".fixedHeadBody table").width();
var diff = divWidth - tableWidth;
if (diff > 0) $scope.scrollBarWidth = diff + "px";
}, 300);
}
I don
Dann in der Steuerung über einen
gridOptions
(oder anderen Variablennamen) wie diese definieren Verstehen Sie nicht, Sie wollen Tabellenköpfe, aber auch reaktionsschnell. Wie ist das möglich? – Stewie@Stewie bitte sehen Sie dies: http://www.fixedheadertable.com/ –
@Stewie Sie können auch das Beispiel von ng-Grid nehmen. Wenn Sie den Header fixieren, bleibt er reaktionsbereit. –