質問1と2
したがって、基本的に、最初のパラメーターは反復するオブジェクトです。配列またはオブジェクトにすることができます。次のようなオブジェクトの場合:
var values = {name: 'misko', gender: 'male'};
Angularは各値を1つずつ取得します。1つ目は名前、2つ目は性別です。
反復するオブジェクトが配列(これも可能)の場合、次のようになります。
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
Angular.forEachは、最初のオブジェクトから始まり、2番目のオブジェクトから順に1つずつ取得します。
このオブジェクトのそれぞれについて、1つずつ取得し、各値に対して特定のコードを実行します。このコードは反復関数と呼ばれます。forEachはスマートで、コレクションの配列を使用している場合は動作が異なります。ここにいくつかの例があります:
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
したがって、keyはキーの文字列値で、valueは...値です。キーを使用して、次のように値にアクセスできます。obj['name'] = 'John'
今回は次のように配列を表示する場合:
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]
したがって、valueはオブジェクト(コレクション)で、keyは配列のインデックスです。
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
// is equal to
{0: { "Name" : "Thomas", "Password" : "thomasTheKing" },
1: { "Name" : "Linda", "Password" : "lindatheQueen" }}
ご質問にお答えしたいと思います。ここJSFiddleは、あなたがしたい場合は、いくつかのコードとテストを実行することです:http://jsfiddle.net/ygahqdge/
コードをデバッグする
問題$http.get()
は、非同期リクエストであることに起因しているようです。
あなたは、あなたの息子にクエリを送信THENブラウザの終わりにそれをダウンロードするとき、それは成功を実行します。しかし、リクエストを送信した直後angular.forEach
に、JSONの応答を待たずにを使用してループを実行します。
ループを成功関数に含める必要があります
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");
});
});
});
これはうまくいくはずです。
より深く行く
$ HTTP APIが基づいている繰延/約束のAPIを $ qをサービスによって公開されます。単純な使用パターンの場合、これは重要ではありませんが、高度な使用の場合、これらのAPIとそれらが提供する保証について理解することが重要です。
遅延/約束のAPIを見ることができます。スムーズな非同期アクションを作成することは、Angularの重要な概念です。
success
、あなたのために起こる$http.get()
とき、このように、angular.forEach()
たまたま、$scope.data
まだ定義されていません。