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>