Pertanyaan 1 & 2
Jadi pada dasarnya, parameter pertama adalah objek yang akan diiterasi. Ini bisa berupa array atau objek. Jika itu objek seperti ini:
var values = {name: 'misko', gender: 'male'};
Sudut akan mengambil setiap nilai satu per satu yang pertama adalah nama, yang kedua adalah jenis kelamin.
Jika objek Anda untuk melakukan iterasi adalah larik (juga mungkin), seperti ini:
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
Angular.forEach akan mengambil satu per satu dimulai dari objek pertama, lalu objek kedua.
Untuk setiap objek ini, ia akan mengambilnya satu per satu dan menjalankan kode tertentu untuk setiap nilai. Kode ini disebut fungsi iterator . forEach cerdas dan berperilaku berbeda jika Anda menggunakan larik koleksi. Berikut beberapa contohnya:
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
Jadi kunci adalah nilai string dari kunci Anda dan nilainya adalah ... nilai. Anda dapat menggunakan kunci untuk mengakses nilai Anda seperti ini:obj['name'] = 'John'
Jika saat ini Anda menampilkan array, seperti ini:
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]
Jadi nilai adalah objek Anda (koleksi), dan kunci adalah indeks dari array Anda karena:
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
// is equal to
{0: { "Name" : "Thomas", "Password" : "thomasTheKing" },
1: { "Name" : "Linda", "Password" : "lindatheQueen" }}
Saya harap ini menjawab pertanyaan Anda. Berikut adalah JSFiddle untuk menjalankan beberapa kode dan menguji jika Anda mau: http://jsfiddle.net/ygahqdge/
Debugging kode Anda
Masalahnya tampaknya berasal dari fakta $http.get()
adalah permintaan asynchronous.
Anda mengirim permintaan pada anak Anda, KEMUDIAN ketika browser Anda selesai mengunduhnya, eksekusi itu berhasil. TAPI setelah mengirim permintaan Anda, lakukan loop menggunakan angular.forEach
tanpa menunggu jawaban JSON Anda.
Anda perlu memasukkan loop dalam fungsi sukses
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");
});
});
});
Ini seharusnya berhasil.
Lebih dalam
The $ http API didasarkan pada ditangguhkan / janji API terpapar oleh layanan $ q. Sementara untuk pola penggunaan sederhana ini tidak terlalu menjadi masalah, untuk penggunaan tingkat lanjut, penting untuk membiasakan diri Anda dengan API ini dan jaminan yang diberikannya.
Anda dapat melihat API tangguhan / janji , ini adalah konsep penting dari Angular untuk membuat tindakan asinkron yang mulus.
success
terjadi$http.get()
, maka ketikaangular.forEach()
terjadi,$scope.data
masih belum ditentukan.