AngularJS заменить элемент в списке через foreach - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь заменить элемент в списке новым (данные). Список находится в моей области видимости как $ scope.list.

Итак, я делаю что-то подобное:

angular.foreach($scope.list, function(element) {
    if(element.id === data.id) {
      element = data;
      console.log(element);
      return false;
});

console.log($scope.list);

В консоли элемент обновляется, но $ scope.list остается без изменений.

Сначала я попытался использовать Array.find () вместо зацикливания списка следующим образом:

$scope.list.filter(x => x.id === data.id)[0] = data;

Но я получил ошибку в консоли: неверная левая часть в назначении.

Знаете ли вы, почему он не меняет $ scope.list? Я новичок в AngularJS и JavaScript.

Заранее благодарю,

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Используйте значения key и obj, доступные для функции итератора:

angular.forEach($scope.list, function(element,key,obj) {
    if(element.id === data.id) {
      obj[key] = data;
      console.log(obj);
      return false;
});

Для получения дополнительной информации см. Справочник по API функции AngularJS angular.forEach .

0 голосов
/ 17 ноября 2018

Попробуйте это

$scope.list = $scope.list.map(element => element.id === data.id ? data : element);

Функция карты - это, по сути, функция forEach с возвращением - map

Без функции стрелки и правильная, если

$scope.list = $scope.list.map(function(element){
  if (element.id === data.id){ 
    return data;
  } 

  return element;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...