цикл foreach в angularjs



Я шел через forEachloop на AngularJS. Есть несколько моментов, которые я не понял об этом.




  1. что такое использование функции итератора? Есть ли способ обойтись без него?

  2. какова значимость ключа и значения, как показано ниже?


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");
});
});


еще вопрос: почему функция выше не входит, если условие и печать "имя пользователя-Томас" в консоли?

1033   4  

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: male

So 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);
        });
    });

The angular.forEach() будет перебирать ваш

измените строку на эту

 angular.forEach(values, function(value, key){
   console.log(key + ': ' + value);
 });

 angular.forEach(values, function(value, key){
   console.log(key + ': ' + value.Name);
 });

Comments

    Ничего не найдено.