Câu hỏi 1 & 2
Vì vậy, về cơ bản, tham số đầu tiên là đối tượng để lặp lại. Nó có thể là một mảng hoặc một đối tượng. Nếu nó là một đối tượng như thế này:
var values = {name: 'misko', gender: 'male'};
Angular sẽ lấy từng giá trị một, giá trị đầu tiên là tên, thứ hai là giới tính.
Nếu đối tượng của bạn để lặp lại là một mảng (cũng có thể), như sau:
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
Angular.forEach sẽ lấy từng cái một bắt đầu bởi đối tượng đầu tiên, sau đó là đối tượng thứ hai.
Đối với mỗi đối tượng này, nó sẽ lấy từng cái một và thực thi một mã cụ thể cho từng giá trị. Đoạn mã này được gọi là hàm vòng lặp . forEach thông minh và hoạt động khác nhau nếu bạn đang sử dụng một mảng của bộ sưu tập. Đây là một số ví dụ:
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
Vì vậy, khóa là giá trị chuỗi của khóa và giá trị là ... giá trị. Bạn có thể sử dụng khóa để truy cập giá trị của mình như sau:obj['name'] = 'John'
Nếu lần này bạn hiển thị một mảng, như sau:
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]
Vì vậy, giá trị là đối tượng của bạn (bộ sưu tập) và khóa là chỉ mục của mảng của bạn vì:
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
// is equal to
{0: { "Name" : "Thomas", "Password" : "thomasTheKing" },
1: { "Name" : "Linda", "Password" : "lindatheQueen" }}
Tôi hy vọng nó trả lời câu hỏi của bạn. Đây là một JSFiddle để chạy một số mã và kiểm tra nếu bạn muốn: http://jsfiddle.net/ygahqdge/
Gỡ lỗi mã của bạn
Vấn đề dường như đến từ thực tế $http.get()
là một yêu cầu không đồng bộ.
Bạn gửi một truy vấn cho con trai của bạn, SAU ĐÓ khi trình duyệt của bạn kết thúc tải xuống, nó sẽ thực thi thành công. NHƯNG ngay sau khi gửi yêu cầu của bạn, bạn thực hiện một vòng lặp bằng cách sử dụng angular.forEach
mà không cần đợi câu trả lời của JSON của bạn.
Bạn cần bao gồm vòng lặp trong hàm thành công
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");
});
});
});
Điều này sẽ hoạt động.
Đi sâu hơn
Các $ http API được dựa trên hoãn / hứa API tiếp xúc bởi dịch vụ $ q. Mặc dù đối với các mẫu sử dụng đơn giản, điều này không quan trọng lắm, nhưng đối với cách sử dụng nâng cao, điều quan trọng là bạn phải tự làm quen với các API này và các đảm bảo mà chúng cung cấp.
Bạn có thể xem xét các API trì hoãn / hứa hẹn , đây là một khái niệm quan trọng của Angular để thực hiện các hành động không đồng bộ trơn tru.
success
việc xảy ra của bạn$http.get()
, do đó, khi nàoangular.forEach()
xảy ra,$scope.data
vẫn chưa được xác định.