Я хотел бы обновить документ в коллекции JSON, используя AngularJS
Моя коллекция JSON:
$Scope.employee = {
"staff" :
[
{
"id" : 1,
"Name" : "John",
"email" : "[email protected]"
},
{
"id" : 2,
"Name" : "Watson",
"email" : "[email protected]"
},
{
"id" : 3,
"Name" : "jack",
"email" : "[email protected]"
},
{
"id" : 4,
"Name" : "Jim",
"email" : "[email protected]"
},
{
"id" : 5,
"Name" : "Rose",
"email" : "[email protected]"
}
]
};
Теперь мне нужно обновить документ, где Id = 2
-
$Scope.updateEmployee = {
"id" : 2,
"Name": "Emma",
"email": "[email protected]"
};
Пожалуйста, помогите мне, как заменить конкретный документ, и я хотел бы обновить email
id = 5
на [email protected]
Вы можете сделать это,
$scope.update = function(){
$scope.employee.staff.forEach(function (item) {
if (item.id == 2 ) {
item.Name = "Emma";
item.email ="[email protected]";
};
});
}
Вы можете сделать это, используя underscore.js
В принципе, вы должны воздерживаться от прохождения всего списка, поскольку это может привести к некоторым проблемам, связанным с производительностью. Что сделает underscore.js
, так это то, что он вернется, как только он найдет приемлемый элемент и не пройдет весь список.
Прочтите официальную документацию здесь
find_.find (список, предикат, [контекст]) Псевдоним: обнаружение
Просматривает каждое значение в списке, возвращая первый, который передает тест истины (предикат), или не определено, если значение не проходит тест. Функция возвращает, как только находит приемлемый элемент и не пересекает весь список.
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.employee = {
"staff": [{
"id": 1,
"Name": "John",
"email": "[email protected]"
}, {
"id": 2,
"Name": "Watson",
"email": "[email protected]"
}, {
"id": 3,
"Name": "jack",
"email": "[email protected]"
}, {
"id": 4,
"Name": "Jim",
"email": "[email protected]"
}, {
"id": 5,
"Name": "Rose",
"email": "[email protected]"
}]
};
$scope.update = function() {
var index = _.findIndex($scope.employee.staff, function(o) {
return o.id == 2;
})
$scope.employee.staff[index].Name = "Emma";
$scope.employee.staff[index].email = "[email protected]";
}
});
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('
<base href="' + document.location + '" />');
</script>
<link rel="stylesheet" href="style.css" />
<script data-require="[email protected]" src="https://code.angularjs.org/1.4.9/angular.js" data-semver="1.4.9"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<div ng-repeat="emp in employee.staff ">
<div>{{emp.id}} {{emp.Name}}</div>
</div>
<button ng-click="update()">
Update
</button>
</body>
</html>
$scope.updateItem = function(item) {
for (var i = 0; i < $cope.employee.staff.length; i++) {
if (item.id === $scope.employee.staff[i].id) {
$scope.employee.staff[i] = item;
break;
}
}
}
Теперь, если вы хотите обновить $ Scope.employee с id 5, просто выполните:
$scope.updateItem({
id: 5,
Name: 'bill',
email: '[email protected]'
});