Ich ging durch die forEach
loop
in AngularJS
. Es gibt einige Punkte, die ich nicht verstanden habe.
- Was ist die Verwendung der Iteratorfunktion? Gibt es einen Weg, ohne ihn auszukommen?
- Welche Bedeutung haben der Schlüssel und der Wert, wie unten gezeigt?
angular.forEach($scope.data, function(value, key){});
PS: Ich habe versucht, diese Funktion ohne die Argumente auszuführen, aber es hat nicht funktioniert.
Hier ist mein json
:
[
{
"Name": "Thomas",
"Password": "thomasTheKing"
},
{
"Name": "Linda",
"Password": "lindatheQueen"
}
]
Meine JavaScript
Datei:
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");
});
});
Eine andere Frage : Warum wird die obige Funktion nicht aktiviert, wenn Bedingung und "Benutzername ist Thomas" in der Konsole gedruckt werden?
success
passiert$http.get()
somit , wennangular.forEach()
geschieht,$scope.data
ist noch nicht definiert.Antworten:
Fragen 1 & 2
Der erste Parameter ist also im Grunde das Objekt, auf dem iteriert werden soll. Es kann ein Array oder ein Objekt sein. Wenn es sich um ein Objekt wie dieses handelt:
Angular nimmt jeden Wert einzeln an, der erste ist der Name, der zweite ist das Geschlecht.
Wenn Ihr zu iterierendes Objekt ein Array ist (auch möglich), wie folgt:
Angular.forEach nimmt eins nach dem anderen, beginnend mit dem ersten Objekt, dann dem zweiten Objekt.
Für jedes dieser Objekte werden sie einzeln verwendet und für jeden Wert ein bestimmter Code ausgeführt. Dieser Code wird aufgerufen Iteratorfunktion bezeichnet . forEach ist intelligent und verhält sich anders, wenn Sie ein Array einer Sammlung verwenden. Hier ist ein Beispiel:
Schlüssel ist also der Zeichenfolgenwert Ihres Schlüssels und Wert ist ... der Wert. Mit dem Schlüssel können Sie wie folgt auf Ihren Wert zugreifen:
obj['name'] = 'John'
Wenn Sie diesmal ein Array wie folgt anzeigen:
Der Wert ist also Ihr Objekt (Sammlung) und der Schlüssel ist der Index Ihres Arrays, da:
Ich hoffe es beantwortet deine Frage. Hier ist eine JSFiddle, mit der Sie Code ausführen und testen können, wenn Sie möchten: http://jsfiddle.net/ygahqdge/
Debuggen Ihres Codes
Das Problem scheint von der Tatsache zu kommen
$http.get()
es sich um eine asynchrone Anforderung handelt.Sie senden eine Anfrage an Ihren Sohn, DANN, wenn Ihr Browser das Herunterladen beendet, wird der Erfolg ausgeführt. ABER kurz nachdem Sie Ihre Anfrage gesendet haben, führen Sie eine Schleife mit durch,
angular.forEach
ohne auf die Antwort Ihres JSON zu warten.Sie müssen die Schleife in die Erfolgsfunktion aufnehmen
Das sollte funktionieren.
Tiefer gehen
Sie können einen Blick auf verzögerte / versprochene APIs werfen. Es ist ein wichtiges Konzept von Angular, reibungslose asynchrone Aktionen auszuführen.
quelle
success
underror
wurde veraltet . Es wird empfohlen, diethen
Methode anstelle von zu verwendensuccess
. Jetzt, @Colin, geh raus und beantworte ein paar Fragen, um 50 Wiederholungen zu bekommen! : PSie müssen verschachtelte angle.forEach-Schleifen für JSON verwenden, wie unten gezeigt:
quelle
values.forEach(object => console.log(
$ {object.name}: $ {object.password}))
.Der
angular.forEach()
wird durch Ihrjson
Objekt iterieren .Erste Iteration,
Zweite Iteration,
Um den Wert Ihres zu erhalten
name
, können Sievalue.name
oder verwendenvalue["name"]
. Gleiches gilt für Siepassword
, Sie verwendenvalue.password
odervalue["password"]
.Der folgende Code gibt Ihnen, was Sie wollen:
quelle
Ändern Sie die Zeile in diese
quelle
In Winkel 7 ist die for-Schleife wie unten
quelle