您可以在編輯時凍結當前排序。假設你的HTML看起來像這樣:
<tbody ng-repeat="item in items | orderBy:orderBy:reverse">
<tr ng-click="startEdit()">
<td>{{item.name}}</td>
</tr>
</tbody>
在你的控制器,你寫的:用戶開始編輯
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;
};
之前,首先在完全相同的順序當前項目,他們目前出現在排序頁。您可以通過使用當前的排序參數調用orderBy $ filter()來完成此操作。
然後,您將檢查您的 - 現在已排序的項目,並添加一個任意屬性(此處爲「pos」)並將其設置爲當前位置。我零填充它,使位置技術整理之前,0011也許這是沒有必要的,不知道。
通常要記住當前排序,在這裏變量的作用域「savedOrder」和「savedReverse」。
最後你告訴角由新的屬性「pos」進行排序,並且表的順序被凍結,因爲該屬性在編輯時不會改變。
當編輯完成後,您需要做的是相反的。您可以從變量的作用域「savedOrder」和「savedReverse」恢復舊排序:
$scope.endEdit = function() {
$scope.orderBy = savedOrderBy;
$scope.reverse = reverse;
};
如果您在$ scope.items陣列事項的順序,你也必須重新排序它原來的排序。
當服務器發送我的數據時,我已經包含了一個額外的'sortBy'列,它具有我想排序的字段,然後ng-repeat使用orderBy。這個字段不在編輯中,所以直到我再次從服務器返回行時纔會更改。即當我「保存」一條記錄時,將從數據庫中提取返回的數據,包括sortBy,它將替換$ scope中的同一行,從而僅在編輯完成後更新頁面上的排序。 – 2016-10-21 16:24:23