我有以下AngularJS模型:
$scope.Model = {
Users : [{
UserId: '',
FirstName: '',
LastName: ''
}],
Products :[{
ProductId: '',
Price: ''
}]
};
如果我使用N个用户填充此数组,并且一个用户有id=1
,那么如何更新该特定用户(id=1
)属性LastName
?
例如,如果我将获得一个新的AngularJS模型:
$scope.UserToUpdate ={
UserId: 1,
LastName: "Smith"
};
我想循环遍历$scope.Model
数组并使用id=1
更新用户,但只更新FirstName
属性。
P.S。我不知道数组中目标用户对象在什么位置,所以基本上可以是$scope.Model.Users[0]
或$scope.Model.Users[1]
或$scope.Model.Users[10]
或$scope.Model.Users[N]
... < / p>
答案 0 :(得分:3)
您可以循环浏览用户列表
for (var i = 0; i < $scope.Model.Users.length; i++) {
if($scope.Model.Users[i].UserId === $scope.UserToUpdate.UserId) {
$scope.Model.Users[i].LastName = $scope.UserToUpdate.LastName;
break;
}
}
编辑:实际上,哈希的答案也是如此。这是使用$ filter的另一种解决方案:
var matchedUsers = $filter('filter')($scope.Model.Users, { UserId: $scope.UserToUpdate.UserId });
if (matchedUsers.length > 0) {
matchedUsers[0].LastName = $scope.UserToUpdate.LastName;
}
并且不要忘记将$ filter服务添加为第二个解决方案的控制器声明中的参数。
答案 1 :(得分:0)
$scope.UserToUpdate =
$scope.Model.Users.filter(function(user) { return user.FirstName == "test"; })[0];
BTW:如果用户存在,您可以添加一个检查..
答案 2 :(得分:0)
你可以使用$ filter
var user = $filter('filter')($scope.Model.Users, 'UserId == 1');
您详细了解了$ filter('filter')here
答案 3 :(得分:0)
试试这个!工作演示http://plnkr.co/edit/scyV79HqqA7nOG9h4ezH?p=preview。请检查控制台日志。
angular.forEach($scope.Model[0].Users, function(value1, key1) {
var i = 0;
angular.forEach(value1, function(value, key) {
if (key == 'UserId' && $scope.UserToUpdate.UserId == value) {
$scope.Model[0].Users[i].LastName = $scope.UserToUpdate.LastName;
}
i++;
});
});
以上代码根据Model
对象(id = 1)更新LastName
对象UserToUpdate
属性