2015-11-20 3 views
4

Я использую угловую ui-сетку для отображения табличных данных.Как отключить сортировку при редактировании в угловой сетке ui

Данные ячейки могут быть отредактированы. Я заметил, что если столбец отсортирован, а затем, если мы отредактируем ячейку, сортировка начнется и перемещает строку. Я хотел бы отключить сортировку по редактированию ячейки, есть ли способ сделать это. Я предоставил ссылку plunker ниже. В plunk сначала сортируйте первый столбец в порядке возрастания, затем отредактируйте значение a2, чтобы сказать x, и щелкните вне ячейки, вы увидите, что оставшаяся строка теперь переместилась до последней. Я хотел бы предотвратить сортировку при редактировании, в основном это ОК, если мы удалим все существующие активные сортировки столбцов при редактировании.

 
    &ltdiv id="grid1" ui-grid="gridOptions" class="grid" ui-grid-edit > 
    </div> 
var app = angular.module('app', ['ngAnimate', 'ngTouch', 'ui.grid','ui.grid.edit', 
      'ui.grid.selection', 
      'ui.grid.rowEdit', 'ui.grid.cellNav']); 
app.controller('MainCtrl', function($scope) { 
    $scope.gridOptions = { 
    enableSorting: true, 
    columnDefs: [ 
     { field: 'A' }, 
     { field: 'B' }, 
     { field: 'C', enableSorting: false } 
    ], 
    onRegisterApi: function(gridApi) { 
     $scope.gridApi = gridApi; 
    } 
    }; 

    $scope.gridOptions.data = [{'A':'a1', 'B':'b1', 'C':'c1'}, {'A':'a3', 'B':'b3', 'C':'c3'}, {'A':'a2', 'B':'b2', 'C':'c2'}]; 

}); 

see Plunk for the behavior http://plnkr.co/edit/17H5K6nOEz9gf4Keeap9?p=preview

enter image description here

+0

, пожалуйста, проверьте права тоже .. спасибо –

+0

Что вы ожидаете от отредактированной строки? Начальный (несортированный) порядок равен a1, a3, a2 - вы хотите вернуть сетку в несортированный порядок, чтобы новый порядок: a1, a3, x (при замене x на a2)? –

ответ

0

набор enableSorting ложь

enableSorting: false 
+1

Я бы хотел, чтобы операции сортировки были доступны, все, что я хочу, это автоматическая сортировка не должна произойти при редактировании. Сортировка должна происходить только тогда, когда пользователь нажимает на заголовок или вызывает операцию сортировки. – Vishwam

1

С beginEditCell обратного вызова, вы можете знать, когда пользователь редактирует. Вы можете воспользоваться преимуществами сохранения и восстановления состояний ui-grid. Save and Restore Ui-grid state С обратным вызовом afterCellEdit или cancelCellEdit вы можете узнать, когда пользователь закончил редактирование, а затем вы можете восстановить его.

+0

Помимо размещения ссылки, вы также должны объяснить, что содержит ссылка, а также предоставить отрывок из содержимого ссылки, которое отвечает (или помогает) на вопрос. – aribeiro

0

Я нашел способ решить эту проблему, выполнив простой взлом.

Сортировка происходит из-за функции обратного вызова (registerDataChangeCallback), когда происходит событие notifyDataChange и запускается функция processRowsCallback, и определение processRowsCallback выглядит следующим образом.

Grid.prototype.processRowsCallback = function processRowsCallback(grid){ 
    grid.queueGridRefresh(); 
    }; 

Здесь Сетка фабрика и функция processRowsCallback определяется по фабрике и ее вызов grid.queueGridRefresh() и сортировка вызывалась и сортировка происходит только после того, как изменений данных в сетке.

Итак, я думал о переопределении функции прототипа processRowsCallBack, введя фабрику Grid на фабрику, которую я создал (extendedGridFactory), и реплицировал ту же функцию, но с условием проверки, если сетка не находится в editmode и вызывающей сетке .queueGridRefresh(); как и следующее.

app.factory('extendedGridFactory', ['Grid', '$rootScope', function (Grid, rootScope) { 
    var extendedGrid = Object.create(Grid); 
    extendedGrid.prototype.processRowsCallback = function processRowsCallback(grid) { 
     if (!rootScope.isInEditMode) { 
      grid.queueGridRefresh(); 
     } 
    }; 
    return extendedGrid; 
}]); 

Отлично, пока его работы прекрасны.

Сообщите, если у вас есть какие-либо проблемы с этим кодом. :)

Смежные вопросы