AngularJS通过foreach替换列表中的元素

时间:2018-11-17 20:52:54

标签: javascript angularjs

我正在尝试用新元素(数据)替换列表中的元素。该列表在我的范围内为$ 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 :(得分:2)

尝试

$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;
});

答案 1 :(得分:0)

使用暴露给迭代器函数的keyobj值:

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

有关更多信息,请参见AngularJS angular.forEach function API Reference