У меня есть пользовательский интерфейс, похожий на excel, где пользователь может изменять данные, в которых он всегда нужен. В настоящее время я использую ng-repeat для отображения существующих данных после извлечения из mongoDB. Эти данные представляют собой массив объектов Json, поэтому ng-repeat отлично работает. Теперь я хочу иметь одну кнопку сохранения, щелкнув которую, все изменения должны быть сохранены. Мой вопрос: как сохранить или узнать, какие строки были изменены? я могу просто отправить весь массив и обновить в db, но когда количество строк велико и данные только одной строки изменились, возникнут лишние накладные расходы. поэтому дайте мне знать, как это можно оптимизировать.
заранее спасибо
$scope.rowsChanged = [];
$scope.Changed = function(row) {
$scope.rowsChanged.push(row);
}
<div ng-repeat="row in rows track by $index">
<input type="text" ng-change="Changed(row)" ng-model="row.textValue">
</div>
Надеюсь, поможет..
Добавьте событие ng-change в поля, где они могут редактировать значения.
На ng-change установите новый ключ "modified: true" в "obj в объектах".
Что-то вроде этого:
<div ng-repeat="row in rows track by $index">
<input type="text" ng-change="markAsChanged($index)" ng-model="row.textValue">
</div>
И ваш JS:
$scope.markAsChanged = function(index) {
$scope.rows[index].changed = true;
}
Тогда ваша функция обновления могла бы перебирать все строки и отправлять измененные строки в webservice для обновления вместо их отправки.
Эта вещь может быть достигнута путем сохранения массива, который содержит индекс для всех строк, которые были изменены. При нажатии на кнопку сохранения в этом массиве потребуется итерация (для строк, которые были изменены). Новый $ index может быть перенесен в этот массив в любое время, когда пользователь просто нажимает на строку или меняет любой вход в массиве. HTML:
<div ng-repeat="row in rows track by $index">
<input type="text" ng-change="markAsChanged($index)" ng-model="row.textValue">
</div>
контроллер:
var listOfChangedRows = [];
$scope.markAsChanged = function(index){
if(listOfChangedRows.indexOf(index)==-1)
{
listOfChangedRows.push(index);
}
}
//Нажмите кнопку "Сохранить".
$scope.saveEditedRows = function(){
var updatedItems = [];
for(var i=0;i<listOfChangedRows.length;i++)
{
updatedItems.push($scope.rows[i]);
}
//Now send the updatedItems array to web service
}