Je traversais l' forEach
loop
en AngularJS
. Il y a quelques points que je n'ai pas compris à ce sujet.
- A quoi sert la fonction itérateur? Y a-t-il moyen de s'en passer?
- Quelle est la signification de la clé et de la valeur comme indiqué ci-dessous?
angular.forEach($scope.data, function(value, key){});
PS: J'ai essayé d'exécuter cette fonction sans les arguments et cela n'a pas fonctionné.
Voici mon json
:
[
{
"Name": "Thomas",
"Password": "thomasTheKing"
},
{
"Name": "Linda",
"Password": "lindatheQueen"
}
]
Mon JavaScript
dossier:
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");
});
});
Une autre question : pourquoi la fonction ci-dessus n'entre pas sur if condition et imprime "username is thomas" dans la console?
success
vôtre se produise$http.get()
, le moment oùangular.forEach()
cela se produit$scope.data
n'est donc toujours pas défini.Réponses:
Questions 1 et 2
Donc, fondamentalement, le premier paramètre est l'objet sur lequel itérer. Cela peut être un tableau ou un objet. S'il s'agit d'un objet comme celui-ci:
Angular prendra chaque valeur une par une, la première étant le nom, la seconde le sexe.
Si votre objet sur lequel itérer est un tableau (également possible), comme ceci:
Angular.forEach prendra un par un en commençant par le premier objet, puis le deuxième objet.
Pour chacun de ces objets, il va donc les prendre un par un et exécuter un code spécifique pour chaque valeur. Ce code est appelé la fonction itérateur . forEach est intelligent et se comporte différemment si vous utilisez un tableau d'une collection. Voici quelques exemples:
La clé est donc la valeur de chaîne de votre clé et la valeur est ... la valeur. Vous pouvez utiliser la clé pour accéder à votre valeur comme ceci:
obj['name'] = 'John'
Si cette fois vous affichez un tableau, comme ceci:
Alors la valeur est votre objet (collection) et la clé est l'index de votre tableau puisque:
J'espère que cela répondra à votre question. Voici un JSFiddle pour exécuter du code et tester si vous le souhaitez: http://jsfiddle.net/ygahqdge/
Déboguer votre code
Le problème semble venir du fait qu'il
$http.get()
s'agit d'une requête asynchrone.Vous envoyez une requête sur votre fils, PUIS lorsque votre navigateur termine le téléchargement, il exécute le succès. MAIS juste après avoir envoyé votre demande, vous effectuez une boucle en utilisant
angular.forEach
sans attendre la réponse de votre JSON.Vous devez inclure la boucle dans la fonction de réussite
Cela devrait fonctionner.
Aller plus profondément
Vous pouvez jeter un œil aux API différées / promises , c'est un concept important d'Angular pour faire des actions asynchrones fluides.
la source
success
eterror
est obsolète . Il est suggéré d' utiliser lathen
méthode au lieu desuccess
. Maintenant, @Colin, sortez et répondez à quelques questions pour obtenir 50 répétitions! : Pvous devez utiliser des boucles angular.forEach imbriquées pour JSON comme indiqué ci-dessous:
la source
values.forEach(object => console.log(
$ {object.name}: $ {object.password}))
.Le
angular.forEach()
va parcourir votrejson
objet.Première itération,
Deuxième itération,
Pour obtenir la valeur de votre
name
, vous pouvez utiliservalue.name
ouvalue["name"]
. Même chose avec votrepassword
, vous utilisezvalue.password
ouvalue["password"]
.Le code ci-dessous vous donnera ce que vous voulez:
la source
Changez la ligne en ceci
la source
Dans Angular 7, la boucle for est comme ci-dessous
la source