Saya akan melalui forEach
loop
dalam AngularJS
. Ada beberapa hal yang saya tidak mengerti tentang itu.
- Apa gunanya fungsi iterator? Apakah ada cara untuk pergi tanpanya?
- Apa pentingnya kunci dan nilai seperti yang ditunjukkan di bawah ini?
angular.forEach($scope.data, function(value, key){});
PS: Saya mencoba menjalankan fungsi ini tanpa argumen dan tidak berhasil.
Ini saya json
:
[
{
"Name": "Thomas",
"Password": "thomasTheKing"
},
{
"Name": "Linda",
"Password": "lindatheQueen"
}
]
JavaScript
File saya :
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");
});
});
Pertanyaan lain : Mengapa fungsi di atas tidak masuk pada kondisi if dan mencetak "username is thomas" di konsol?
success
terjadi$http.get()
, maka ketikaangular.forEach()
terjadi,$scope.data
masih belum ditentukan.Jawaban:
Pertanyaan 1 & 2
Jadi pada dasarnya, parameter pertama adalah objek yang akan diiterasi. Ini bisa berupa array atau objek. Jika itu objek seperti ini:
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:
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:
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:
Jadi nilai adalah objek Anda (koleksi), dan kunci adalah indeks dari array Anda karena:
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
Ini seharusnya berhasil.
Lebih dalam
Anda dapat melihat API tangguhan / janji , ini adalah konsep penting dari Angular untuk membuat tindakan asinkron yang mulus.
sumber
success
danerror
sudah tidak digunakan lagi . Disarankan menggunakanthen
metode alih-alih menggunakansuccess
. Sekarang, @Colin, keluar dan Jawab beberapa pertanyaan untuk mendapatkan 50 perwakilan! : PAnda harus menggunakan loop bersarang angular.forEach untuk JSON seperti yang ditunjukkan di bawah ini:
sumber
values.forEach(object => console.log(
$ {object.name}: $ {object.password}))
.The
angular.forEach()
akan iterate melalui Andajson
objek.Iterasi pertama,
Iterasi kedua,
Untuk mendapatkan nilai Anda
name
, Anda dapat menggunakanvalue.name
atauvalue["name"]
. Sama dengan Andapassword
, Anda menggunakanvalue.password
atauvalue["password"]
.Kode di bawah ini akan memberikan apa yang Anda inginkan:
sumber
Ubah garis menjadi ini
sumber
Pada Angular 7 loop for seperti di bawah ini
sumber