Я шел через forEach
loop
ин AngularJS
. Есть несколько моментов, которые я не понял по этому поводу.
- Какая польза от функции итератора? Есть ли способ обойтись без этого?
- Какое значение имеют ключ и значение, как показано ниже?
angular.forEach($scope.data, function(value, key){});
PS: Я попытался запустить эту функцию без аргументов, но это не сработало.
Вот мой json
:
[
{
"Name": "Thomas",
"Password": "thomasTheKing"
},
{
"Name": "Linda",
"Password": "lindatheQueen"
}
]
Мой JavaScript
файл:
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");
});
});
Другой вопрос : почему вышеуказанная функция не запускается при условии if и выводит в консоли «username is thomas»?
success
ваше$http.get()
, поэтому, когда этоangular.forEach()
произойдет,$scope.data
все еще не определено.Ответы:
Вопросы 1 и 2
Итак, по сути, первый параметр - это объект для итерации. Это может быть массив или объект. Если это такой объект:
Angular будет принимать каждое значение одно за другим, первое - имя, второе - пол.
Если ваш объект для итерации представляет собой массив (также возможно), например:
Angular.forEach будет принимать один за другим, начиная с первого объекта, затем второго объекта.
Для каждого из этих объектов он будет брать их один за другим и выполнять определенный код для каждого значения. Этот код называется функцией итератора . forEach умен и ведет себя иначе, если вы используете массив коллекции. Вот пример:
Итак, ключ - это строковое значение вашего ключа, а значение - это ... значение. Вы можете использовать ключ для доступа к своему значению следующим образом:
obj['name'] = 'John'
Если на этот раз вы отобразите массив, например:
Итак, значение - это ваш объект (коллекция), а ключ - это индекс вашего массива, поскольку:
Надеюсь, он ответит на ваш вопрос. Вот JSFiddle для запуска кода и тестирования, если хотите: http://jsfiddle.net/ygahqdge/
Отладка вашего кода
Проблема, похоже, связана с тем,
$http.get()
что это асинхронный запрос.Вы отправляете запрос своему сыну, ТОГДА, когда браузер заканчивает загрузку, он выполняет успешно. НО сразу после отправки вашего запроса вы выполняете цикл,
angular.forEach
не дожидаясь ответа вашего JSON.Вам нужно включить цикл в функцию успеха
Это должно работать.
Идти глубже
Вы можете взглянуть на отложенные / обещающие API , это важная концепция Angular для создания плавных асинхронных действий.
источник
success
иerror
он объявлен устаревшим . Предлагается использоватьthen
метод вместоsuccess
. А теперь, @Colin, иди и ответь на несколько вопросов, чтобы получить 50 представителей! : Pвы должны использовать вложенные циклы angular.forEach для JSON, как показано ниже:
источник
values.forEach(object => console.log(
$ {object.name}: $ {object.password}))
.Он
angular.forEach()
будет перебирать вашjson
объект.Первая итерация,
Вторая итерация,
Чтобы получить значение вашего
name
, вы можете использоватьvalue.name
илиvalue["name"]
. То же самое с вашимpassword
, вы используетеvalue.password
илиvalue["password"]
.Приведенный ниже код даст вам то, что вы хотите:
источник
Измените строку на эту
источник
В Angular 7 цикл for выглядит так, как показано ниже
источник