цикл foreach в angularjs
Я шел через forEachloop на AngularJS. Есть несколько моментов, которые я не понял об этом.
- что такое использование функции итератора? Есть ли способ обойтись без него?
- какова значимость ключа и значения, как показано ниже?
angular.forEach($scope.data, function(value, key){});
PS: я попытался запустить эту функцию без аргументов, и он не работал.
вот мой json:
[
{
"Name": "Thomas",
"Password": "thomasTheKing"
},
{
"Name": "Linda",
"Password": "lindatheQueen"
}
]
мой JavaScript file:
var app = angular.module('testModule', []);
app.controller('testController', function($scope, $http){
$http.get('Data/info.json').then(
function(data){
$scope.data = data;
}
);
angular.forEach($scope.data, function(value, key){
if(value.Password == "thomasTheKing")
console.log("username is thomas");
});
});
еще вопрос: почему функция выше не входит, если условие и печать "имя пользователя-Томас" в консоли?
4 ответов:
вопросы 1 и 2
Итак, первый параметр-это объект для итерации. Это может быть массив или объект. Если это такой объект:
var values = {name: 'misko', gender: 'male'};угловой будет считать каждое значение по одному, первый-имя, второй-пол.
если ваш объект для итерации является массивом (также возможно), например:
[{ "Name" : "Thomas", "Password" : "thomasTheKing" }, { "Name" : "Linda", "Password" : "lindatheQueen" }]Угловое.forEach будет принимать один за другим, начиная с первого объекта, затем второй объект.
для каждого из этих объектов он будет принимать их по одному и выполнять определенный код для каждого значения. Этот код называется итератор функция. forEach является умным и ведет себя по-разному, если вы используете массив коллекции. Вот некоторые примеры:
var obj = {name: 'misko', gender: 'male'}; var log = []; angular.forEach(obj, function(value, key) { console.log(key + ': ' + value); }); // it will log two iteration like this // name: misko // gender: maleSo key-это строковое значение вашего ключа и значение is ... значение. Вы можете использовать ключ для доступа к вашему значению следующим образом:
obj['name'] = 'John'если на этот раз вы показываете массив, как это :
var values = [{ "Name" : "Thomas", "Password" : "thomasTheKing" }, { "Name" : "Linda", "Password" : "lindatheQueen" }]; angular.forEach(values, function(value, key){ console.log(key + ': ' + value); }); // it will log two iteration like this // 0: [object Object] // 1: [object Object]тогда value - это ваш объект (коллекция), а key-индекс вашего массива, так как :
[{ "Name" : "Thomas", "Password" : "thomasTheKing" }, { "Name" : "Linda", "Password" : "lindatheQueen" }] // is equal to {0: { "Name" : "Thomas", "Password" : "thomasTheKing" }, 1: { "Name" : "Linda", "Password" : "lindatheQueen" }}Я надеюсь, что это ответит на ваш вопрос. Вот JSFiddle, чтобы запустить некоторый код и проверить, если вы хотите:http://jsfiddle.net/ygahqdge/
отладку кода
проблема, кажется, исходит из факта
$http.get()- это асинхронный запрос.вы отправляете запрос на вашего сына, затем когда вы заканчиваете загрузку браузера, он выполняет успех. но сразу после отправки запроса ваш выполнить цикл с помощью
angular.forEachне дожидаясь ответа вашего JSON.вам нужно включить цикл в функцию success
var app = angular.module('testModule', []) .controller('testController', ['$scope', '$http', function($scope, $http){ $http.get('Data/info.json').then(function(data){ $scope.data = data; angular.forEach($scope.data, function(value, key){ if(value.Password == "thomasTheKing") console.log("username is thomas"); }); }); });это должно работать.
будут более глубоко
The $http API основан на отложенные / обещанные API подвергается воздействию $вопрос услуга. Хотя для простых шаблонов использования это не имеет большого значения, для расширенное использование важно ознакомиться с этими API и гарантии, которые они предоставляют.
вы можете посмотреть на отложенные / обещанные API, это важная концепция углового, чтобы сделать плавные асинхронные действия.
вы должны использовать вложенные угловые.циклы forEach для JSON, как показано ниже:
var values = [ { "name":"Thomas", "password":"thomas" }, { "name":"linda", "password":"linda" }]; angular.forEach(values,function(value,key){ angular.forEach(value,function(v1,k1){//this is nested angular.forEach loop console.log(k1+":"+v1); }); });
измените строку на эту
angular.forEach(values, function(value, key){ console.log(key + ': ' + value); }); angular.forEach(values, function(value, key){ console.log(key + ': ' + value.Name); });
Comments