Yo estaba pasando por la forEach
loop
de AngularJS
. Hay algunos puntos que no entendí al respecto.
- ¿Cuál es el uso de la función de iterador? ¿Hay alguna forma de prescindir de él?
- ¿Cuál es el significado de la clave y el valor que se muestran a continuación?
angular.forEach($scope.data, function(value, key){});
PD: intenté ejecutar esta función sin los argumentos y no funcionó.
Aquí está mi json
:
[
{
"Name": "Thomas",
"Password": "thomasTheKing"
},
{
"Name": "Linda",
"Password": "lindatheQueen"
}
]
Mi JavaScript
archivo:
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");
});
});
Otra pregunta : ¿Por qué la función anterior no ingresa en if condición e imprime "nombre de usuario es thomas" en la consola?
success
que suceda su$http.get()
, por lo tanto, cuandoangular.forEach()
suceda,$scope.data
aún no está definido.Respuestas:
Preguntas 1 y 2
Entonces, básicamente, el primer parámetro es el objeto sobre el que iterar. Puede ser una matriz o un objeto. Si es un objeto como este:
Angular tomará cada valor uno por uno, el primero es el nombre, el segundo es el género.
Si su objeto para iterar es una matriz (también es posible), así:
Angular.forEach tomará uno por uno comenzando por el primer objeto, luego el segundo objeto.
Para cada uno de estos objetos, los tomará uno por uno y ejecutará un código específico para cada valor. Este código se llama función de iterador . forEach es inteligente y se comporta de manera diferente si está utilizando una matriz de una colección. A continuación se muestra un ejemplo:
Entonces, la clave es el valor de cadena de su clave y el valor es ... el valor. Puede usar la clave para acceder a su valor de esta manera:
obj['name'] = 'John'
Si esta vez muestra una matriz, como esta:
Entonces el valor es su objeto (colección), y la clave es el índice de su matriz ya que:
Espero que responda a tu pregunta. Aquí hay un JSFiddle para ejecutar algún código y probarlo si lo desea: http://jsfiddle.net/ygahqdge/
Depurando tu código
El problema parece provenir del hecho de que
$http.get()
es una solicitud asincrónica.Envías una consulta sobre tu hijo, ENTONCES , cuando el navegador termina de descargarlo, se ejecuta correctamente. PERO justo después de enviar su solicitud, realiza un ciclo usando
angular.forEach
sin esperar la respuesta de su JSON.Debe incluir el bucle en la función de éxito
Esto debería funcionar.
Yendo mas profundo
Puede echar un vistazo a las API diferidas / prometidas , es un concepto importante de Angular para realizar acciones asincrónicas sin problemas.
fuente
success
yerror
han sido desaprobados . Se sugiere utilizar elthen
método en lugar desuccess
. ¡Ahora, @ Colin, sal y responde algunas preguntas para obtener 50 repeticiones! : Ptienes que usar bucles angulares.forEach anidados para JSON como se muestra a continuación:
fuente
values.forEach(object => console.log(
$ {object.name}: $ {object.password}))
.El
angular.forEach()
iterará a través de sujson
objeto.Primera iteración,
Segunda iteración,
Para obtener el valor de su
name
, puede usarvalue.name
ovalue["name"]
. Lo mismo con tupassword
, usasvalue.password
ovalue["password"]
.El siguiente código le dará lo que desea:
fuente
Cambia la línea en esto
fuente
En Angular 7, el bucle for es como el siguiente
fuente