Как обновить только определенные строки при использовании ng-repeat

0

У меня есть пользовательский интерфейс, похожий на excel, где пользователь может изменять данные, в которых он всегда нужен. В настоящее время я использую ng-repeat для отображения существующих данных после извлечения из mongoDB. Эти данные представляют собой массив объектов Json, поэтому ng-repeat отлично работает. Теперь я хочу иметь одну кнопку сохранения, щелкнув которую, все изменения должны быть сохранены. Мой вопрос: как сохранить или узнать, какие строки были изменены? я могу просто отправить весь массив и обновить в db, но когда количество строк велико и данные только одной строки изменились, возникнут лишние накладные расходы. поэтому дайте мне знать, как это можно оптимизировать.

заранее спасибо

Теги:
angularjs-ng-repeat
ng-repeat

3 ответа

1

$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>

Надеюсь, поможет..

1

Добавьте событие 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 для обновления вместо их отправки.

  • 0
    Даже в этом методе я должен перебирать все строки (в контроллере), верно? Чтобы проверить, какие строки изменены, я нажимаю кнопку «Сохранить все».
  • 0
    Да, но преимущество в том, что ваша полезная нагрузка сводится к отправке ТОЛЬКО измененных строк, а не всего набора данных. Вы можете изменить пометку как измененную, чтобы обновить строки на лету. поэтому каждое изменение может выдвинуть обновленный объект в бэкэнд.
0

Эта вещь может быть достигнута путем сохранения массива, который содержит индекс для всех строк, которые были изменены. При нажатии на кнопку сохранения в этом массиве потребуется итерация (для строк, которые были изменены). Новый $ 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
}
  • 0
    Спасибо большое рахул, это работает
  • 0
    @Rahul Malu: Как вы получаете значение updatedItems?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню