Sie können die aktuelle Bestellung während der Bearbeitung einfrieren. Sagen Sie Ihre HTML wie folgt aussieht:
<tbody ng-repeat="item in items | orderBy:orderBy:reverse">
<tr ng-click="startEdit()">
<td>{{item.name}}</td>
</tr>
</tbody>
In Ihrem Controller schreiben Sie:
var savedOrderBy, savedReverse;
$scope.startEdit() = function() {
$scope.items = $filter('orderBy')($scope.items, $scope.orderby, $scope.reverse);
for (var i = 0; i < $scope.items.length; ++i) {
if (i < 9999) {
$scope.items[i]['pos'] = ("000" + i).slice(-4);
}
}
savedOrderBy = $scope.orderBy;
savedReverse = $scope.reverse;
$scope.orderBy = 'pos';
$scope.reverse = false;
};
Bevor der Anwender die Bearbeitung beginnt, müssen Sie zunächst in genau der gleichen Reihenfolge die aktuellen Artikel sortieren, dass sie derzeit in der erscheinen Seite. Dazu rufen Sie den Befehl orderBy $ filter() mit den aktuellen Sortierparametern auf.
Dann gehen Sie über Ihre - jetzt sortierten - Elemente und fügen eine beliebige Eigenschaft (hier "pos") hinzu und setzen sie an die aktuelle Position. Ich zero-pad es so, dass die Position 0002 vor dem Jahr 0011 zusammenkommt. Vielleicht ist das nicht notwendig, keine Ahnung.
Normalerweise möchten Sie sich an die aktuelle Reihenfolge erinnern, hier in den Scope-Variablen "savedOrder" und "savedReverse".
Und schließlich sagen Sie eckig nach der neuen Eigenschaft "pos" zu sortieren und voilà ist die Tabellenreihenfolge eingefroren, weil sich diese Eigenschaft während der Bearbeitung einfach nicht ändert.
Wenn Sie mit der Bearbeitung fertig sind, müssen Sie das Gegenteil tun. Sie restaurieren die alte Ordnung von dem Umfang Variablen „savedOrder“ und „savedReverse“:
$scope.endEdit = function() {
$scope.orderBy = savedOrderBy;
$scope.reverse = reverse;
};
Wenn die Reihenfolge der Array-Angelegenheiten scope.items $ für Sie, würden Sie auch sortieren sie müssen wieder in seine ursprüngliche Bestellung .
Wenn der Server meine Daten sendet, habe ich eine zusätzliche Spalte 'sortBy', die die Felder enthält, die ich sortieren möchte, dann verwendet ng-repeat das für orderBy. Dieses Feld befindet sich nicht in der Bearbeitung, ändert sich also erst, wenn ich die Zeile (n) erneut vom Server abrufe. I.e. Wenn ich einen Datensatz "speichere", werden die zurückkehrenden Daten aus der Datenbank abgerufen, einschließlich der sortBy, die die gleiche Zeile in $ scope ersetzt und die Sortierung auf der Seite erst dann aktualisiert, wenn die Bearbeitung abgeschlossen ist. –