Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 数组中的角度更新对象_Angularjs - Fatal编程技术网

Angularjs 数组中的角度更新对象

Angularjs 数组中的角度更新对象,angularjs,Angularjs,我想更新对象数组中的对象。除了迭代所有项目并更新匹配的项目之外,还有其他可能性吗?当前代码如下所示: angular.module('app').controller('MyController', function($scope) { $scope.object = { name: 'test', objects: [ {id: 1, name: 'test1'}, {id: 2, name: 'test2

我想更新对象数组中的对象。除了迭代所有项目并更新匹配的项目之外,还有其他可能性吗?当前代码如下所示:

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;
            }
        }
    }
});
angular.module('app').controller('MyController',function($scope){
$scope.object={
名称:'测试',
对象:[
{id:1,名称:'test1'},
{id:2,名称:'test2'}
]
};
$scope.update=函数(id、数据){
var objects=$scope.object.objects;
对于(var i=0;i
有几种方法可以做到这一点。你的情况不是很清楚

->您可以传递索引而不是id。然后,您的更新函数将如下所示:

$scope.update = function(index, data) {
    $scope.object.objects[index] = data;
};
->可以在视图上使用ng repeat,并将对象属性绑定到输入元素

<div ng-repeat="item in object.objects">
    ID: <input ng-model="item.id" /> <br/>
    Name: <input ng-model="item.name" /> <br/>
</div>

ID:
名称:

离开你的车,我会这样做:

  • 改变

    <a href="javascript:;" ng-click="selectSubObject(subObject.id)">Edit</a>
    
但是,如果您只有要关闭的
id
,则可以使用角度过滤器服务对所需的
id
进行过滤。但这仍然会在后台执行循环并在数组上迭代


请参阅文档以查看其公开的变量。

帮助从数组中查找元素的筛选器也可用于直接更新数组中的元素。 在下面的代码[0]-->中,是直接访问的对象


$filter('filter')($scope.model,{firstName:selected})[0]
将项目传递给更新方法。请看下面的示例

函数MyCtrl($scope){
$scope.items=
[
{name:'obj1',info:{text:'obj1的一些额外信息',show:true},
{name:'obj2',info:{text:'obj2的一些额外信息',show:false},
];
$scope.updateName=函数(项,新名称){
item.name=新名称;
} 
}

{{x.name}

视图是什么样子的?如果您对调用
update()
的对象有引用,请传入该对象,而不是id。添加到anthony的建议中
ng click=“更新(obj,数据)”
而不是
ng click=“更新(obj.id,数据)”
此外,是否要在添加之前检查id?“我相信,这不是你所需要的吗?”多米尼克·巴兰补充道:“多米尼克考虑接受一个答案吧!在下面添加了一个Plunk,如果您试图按id更新,则索引不一定与id对应。您可能会得到错误的记录。请注意,angular.copy将创建一个新对象,因此您不会获得angular真正有用的双向绑定。如果你想用他的更改来更新主对象,那么我认为angular.copy是不必要的。是的,这里最好使用索引而不是id,但问题仍然是一样的。我必须更新我的主对象中的对象,但我不知道该怎么做,因为我不知道索引。我使用copy方法,因为用户应该可以返回而不保存更改。如果我引用的是真实对象,则任何更改都将在不按“保存”按钮的情况下保存。我的问题是我的子对象控制器的保存方法。添加了一个fork,如果目标是不在数组上循环,并且您没有索引,那么这是不可能的。正如我前面提到的,可以使用角度过滤器来过滤数组,但这会在封面下进行循环。使用$filter服务的示例:
$filter('filter')($scope.selectedMainObject.subObjects,{id:$scope.selectedSubObject.id)
。另一个选项(我要做的)是重新设计实现以保存索引。我已更新了plunker以保存索引:
<a href="javascript:;" ng-click="selectSubObject($index)">Edit</a>