2013-07-11 2 views
0

Я использую Angularjs. У меня есть таблица, где пользователи могут добавлять и обновлять список пользователей. Когда кто-то редактирует существующего пользователя, я сначала удаляю этого пользователя из облачного массива, а затем нажимаю обновленный объект.Обновление элемента в массиве

$.each($scope.users, function (index, value) { 
    if (value['empId'] == $scope.userToAdd.empId) { 
    console.log(index); 
    $scope.users.splice(index, 1); 
    } 
}); 
$scope.users.push($scope.userToAdd); 

Это лучший способ приблизиться к этой проблеме? Второй вопрос, который у меня есть, находится на линии, где я соединяюсь. Угловой бросает ошибку, которая гласит:

Error: value is undefined 

Элемент по-прежнему удален, но эта ошибка предотвращает толчок от происходящих. У меня такое чувство, что это имеет какое-то отношение к сфере видимости, но может найти ответ. Благодаря!

+0

Вместо того, чтобы $ scope.users.push ($ scope.userToAdd); на последнем ставите этот код после $ scope.users.splice (index, 1); это решит проблему. – Gyanendra

+0

u также можете использовать ng-сетку прямо из окна, проверьте это -> http://angular-ui.github.io/ng-grid/ прокрутите вниз до пункта «Редактировать выбранный выбор ячейки фокуса», plnkr-> http: //plnkr.co/edit/KJmYbO?p=preview – Atrix1987

+0

измененная ng-сетка в соответствии с вашими потребностями. http://plnkr.co/edit/cJHgKI?p=preview – Atrix1987

ответ

1

Проблема с вашим кодом заключается в том, что вы удаляете из массива во время итерации по нему, что является непоследовательным.

Что вы должны сделать, это

  1. Найти индекс пользователя, которого вы хотите удалить (с помощью некоторого перекручивания построить как $ .each)
  2. сращивания элемента из (вне цикла).
  3. Добавить обратно.

Что-то вроде

$.each($scope.users, function (index, value) { 
    if (value['empId'] == $scope.userToAdd.empId) { 
     userFoundAt=index; 
    } 
}); 
$scope.users.splice(userFoundAt, 1); 
$scope.users.push($scope.userToAdd); 
Смежные вопросы