数组中的角度更新对象

Dom*_*ann 13 angularjs

我想更新对象数组中的对象.是否有另一种可能性,而不是迭代所有项目并更新匹配的项目?当前代码如下所示:

angular.module('app').controller('MyController', function($scope) {
    $scope.object = {
        name: 'test',
        objects: [
            {id: 1, name: 'test1'},
            {id: 2, name: 'test2'}
        ]
    };

    $scope.update = function(id, data) {
        var objects = $scope.object.objects;

        for (var i = 0; i < objects.length; i++) {
            if (objects[i].id === id) {
                objects[i] = data;
                break;
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

Kur*_*ven 7

有几种方法可以做到这一点.你的情况不是很清楚.

- >您可以传递索引而不是id.然后,您的更新功能将如下:

$scope.update = function(index, data) {
    $scope.object.objects[index] = data;
};
Run Code Online (Sandbox Code Playgroud)

- >您可以在视图上使用ng-repeat并将对象属性绑定到输入元素.

<div ng-repeat="item in object.objects">
    ID: <input ng-model="item.id" /> <br/>
    Name: <input ng-model="item.name" /> <br/>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 如果您尝试按ID更新,则index不一定与id对应.你最终可能会得到错误的记录. (2认同)

Abh*_*eet 7

有助于从数组中查找元素的过滤器也可用于直接更新数组中的元素.在下面的代码中[0] - >是直接访问的对象.

Plunker演示

$filter('filter')($scope.model, {firstName: selected})[0]


Art*_*iom 6

将项目传递给更新方法.看看下面的样品.

function MyCtrl($scope) {
  $scope.items = 
    [
      {name: 'obj1', info: {text: 'some extra info for obj1', show: true}},
      {name: 'obj2', info: {text: 'some extra info for obj2', show: false}},
    ];
  $scope.updateName = function(item, newName){
     item.name = newName;
  } 
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app>
  <table ng-controller="MyCtrl" class="table table-hover table-striped">
    <tr ng-repeat="x in items">
        <td> {{ x.name }}</td>
        <td> 
           <a href="#" ng-show="!showUpdate" ng-click="someNewName = x.name; showUpdate = true">Update</a>
           <div ng-show="showUpdate" ><input type="text" ng-model="someNewName"> <input type="button" value="update" ng-click="updateName(x, someNewName); showUpdate = false;"></div>
         </td>
    </tr>

  </table>
</body>
Run Code Online (Sandbox Code Playgroud)