Sorular 1 ve 2
Yani temel olarak, ilk parametre yinelenecek nesnedir. Bir dizi veya nesne olabilir. Böyle bir nesne ise:
var values = {name: 'misko', gender: 'male'};
Açısal, her bir değeri tek tek alacaktır, ilki isim, ikincisi cinsiyettir.
Üzerinde yinelenecek nesneniz bir diziyse (ayrıca mümkün), şöyle:
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
Angular.forEach, ilk nesneden başlayarak, ardından ikinci nesneden birer birer alır.
Bu nesnelerin her biri için, onları tek tek alacak ve her değer için belirli bir kod çalıştıracaktır. Bu koda yineleyici işlevi denir . forEach akıllıdır ve bir koleksiyon dizisi kullanıyorsanız farklı davranır. İşte bazı örnekler:
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
Yani anahtar, anahtarınızın dize değeridir ve değer ... değerdir. Değerinize şu şekilde erişmek için anahtarı kullanabilirsiniz:obj['name'] = 'John'
Bu sefer şunun gibi bir dizi görüntülerseniz:
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]
Öyleyse değer, nesneniz (koleksiyon) ve anahtar, dizinizin dizinidir, çünkü:
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
// is equal to
{0: { "Name" : "Thomas", "Password" : "thomasTheKing" },
1: { "Name" : "Linda", "Password" : "lindatheQueen" }}
Umarım sorunuza cevap verir. İşte biraz kod çalıştırmak ve isterseniz test etmek için bir JSFiddle: http://jsfiddle.net/ygahqdge/
Kodunuzda hata ayıklama
Sorun $http.get()
, eşzamansız bir istekten kaynaklanıyor gibi görünüyor .
Oğlunuza bir sorgu gönderirsiniz, SONRA , tarayıcınızı indirmeyi bitirdiğinizde, başarılı olur. AMA , isteğinizi gönderdikten hemen sonra angular.forEach
JSON'nuzun yanıtını beklemeden kullanarak bir döngü gerçekleştirin .
Döngüyü başarı işlevine dahil etmeniz gerekir
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");
});
});
});
Bu çalışmalı.
Daha derine inmek
$ Http API dayanmaktadır ertelenmiş / API'ler vaat $ q hizmeti tarafından maruz. Basit kullanım modelleri için bu çok önemli olmasa da, gelişmiş kullanım için bu API'leri ve sağladıkları garantileri öğrenmeniz önemlidir.
Ertelenmiş / vaat edilen API'lere bir göz atabilirsiniz , sorunsuz eşzamansız eylemler yapmak Angular'ın önemli bir konseptidir.
success
olmasını beklemiyorsunuz$http.get()
, bu yüzden ne zamanangular.forEach()
olursa olsun,$scope.data
hala tanımsızdır.