[解決済み] angularjsのforeachループ
質問
私は
forEach
loop
で
AngularJS
. この点については、いくつか理解できない点がありました。
- イテレータ関数の用途は何ですか?それを使わない方法はないのでしょうか?
- 下図のようなキーと値の意味は何ですか?
angular.forEach($scope.data, function(value, key){});
PS: この関数を引数なしで実行してみましたが、うまくいきませんでした。
以下は私の
json
:
[
{
"Name": "Thomas",
"Password": "thomasTheKing"
},
{
"Name": "Linda",
"Password": "lindatheQueen"
}
]
私の
JavaScript
ファイルを作成します。
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");
});
});
もう一つの質問 : なぜ上の関数はif条件を入力せず、コンソールに "ユーザ名はthomas"と表示するのでしょうか?
どのように解決するのですか?
質問1&2
基本的に、最初のパラメータは反復処理するオブジェクトです。配列でもオブジェクトでも構いません。それがこのようなオブジェクトである場合。
var values = {name: 'misko', gender: 'male'};
Angularはそれぞれの値を1つずつ取得します。1つ目は名前、2つ目は性別です。
反復処理するオブジェクトが配列の場合(これも可能)、以下のようになります。
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
Angular.forEachは1つ目のオブジェクトから始まり、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()
が非同期リクエストであることに起因しているようです。
息子にクエリを送ります。
次に
ブラウザがダウンロードを終了したとき、それは成功を実行します。
しかし
を使用してループを実行します。
angular.forEach
を使ってループしています。
success関数にループを入れる必要があります。
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 は deferred/promise API を使用しています。 が公開する $q サービスによって公開されています。単純な使用法であれば、これはあまり重要ではありません。 高度な使用法では、これらのAPIとそれらが提供する保証に精通することが重要です。 とそれらが提供する保証に精通することが重要です。
をご覧ください。 deferred/promise API を見てみましょう。 を見てください。これはスムーズな非同期アクションを作るためのAngularの重要なコンセプトです。
関連
-
[解決済み] オブジェクトと選択機能を備えたAngularJS BootstrapUI Typeahead
-
角型グローバル確認ボックス
-
[解決済み] Angular.js: $evalの仕組みとバニラevalとの違いは何ですか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] foreachループの現在の反復処理のインデックスを取得するにはどうすればよいですか?
-
[解決済み] Goにforeachループはあるのか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】npm UNMET PEER DEPENDENCYの警告を修正するにはどうすればいいですか?
-
[解決済み】Angularjs accordion ng-click on panel-header
-
[解決済み] プリフライト応答が成功しない
-
[解決済み] AngularJs ReferenceError: $http is not defined
-
[解決済み] AngularJS の ng-disabled ディレクティブに式を指定しても動作しない
-
[解決済み] Apigee API へのリクエストで 401 レスポンスエラーが発生する
-
[解決済み] AngularJs .$setPristineでフォームをリセットする
-
[解決済み] Angular.js: $evalの仕組みとバニラevalとの違いは何ですか?
-
[解決済み] 条件に応じて特定のルートにリダイレクトする機能
-
[解決済み] AngularJSでEnterキーを押したときにフォームを送信する