在angularjs foreach循环

我正在通过AngularJSforEach loop 。 有几点我不明白。

  1. 迭代器函数的用途是什么? 没有它,有什么办法可以去吗?
  2. 关键和价值的意义如下所示?

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"); }); }); 

另一个问题 :为什么上面的function不进入,如果条件和打印“用户名是托马斯”在控制台?

问题1和2

所以基本上,第一个参数是要迭代的对象。 它可以是一个数组或一个对象。 如果是这样的对象:

 var values = {name: 'misko', gender: 'male'}; 

angular度会逐一取每个值,第一个是名字,第二个是性别。

如果你的对象迭代是一个数组(也是可能的),像这样:

 [{ "Name" : "Thomas", "Password" : "thomasTheKing" }, { "Name" : "Linda", "Password" : "lindatheQueen" }] 

Angular.forEach将从第一个对象开始,然后是第二个对象。

对于每一个这个对象,它都会一个接一个地执行一个特定的代码。 这段代码被称为迭代器函数 。 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 

所以键是你的键的string值,值是…的价值。 你可以用这个键来访问你的值: 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] 

那么值就是你的对象(集合),key是你的数组的索引,因为:

 [{ "Name" : "Thomas", "Password" : "thomasTheKing" }, { "Name" : "Linda", "Password" : "lindatheQueen" }] // is equal to {0: { "Name" : "Thomas", "Password" : "thomasTheKing" }, 1: { "Name" : "Linda", "Password" : "lindatheQueen" }} 

我希望能回答你的问题。 这里是一个JSFiddle来运行一些代码和testing,如果你想要的: http : //jsfiddle.net/ygahqdge/

debugging你的代码

这个问题似乎来自$http.get()是一个asynchronous请求。

你发送一个查询你的儿子, 那么当你浏览器结束下载它执行成功。 发送您的请求后,您使用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基于$ q服务公开的延迟/承诺API 。 虽然对于简单的使用模式,这并不重要,但对于高级用法,熟悉这些API和提供的担保非常重要。

您可以看看延期/承诺的API ,Angular的一个重要概念是使平滑的asynchronous操作。

你必须为JSON使用嵌套的angular.forEach循环,如下所示:

  var values = [ { "name":"Thomas", "password":"thomas" }, { "name":"linda", "password":"linda" }]; angular.forEach(values,function(value,key){ angular.forEach(value,function(v1,k1){//this is nested angular.forEach loop console.log(k1+":"+v1); }); }); 

将此行更改为此

  angular.forEach(values, function(value, key){ console.log(key + ': ' + value); }); angular.forEach(values, function(value, key){ console.log(key + ': ' + value.Name); }); 

angular.forEach()将迭代你的json对象。

第一次迭代,

key = 0,value = {“name”:“Thomas”,“password”:“thomasTheKing”}

第二次迭代,

key = 1,value = {“name”:“Linda”,“password”:“lindatheQueen”}

要获得你的name的价值,你可以使用value.namevalue["name"] 。 与您的password相同,您使用value.passwordvalue["password"]

下面的代码会给你你想要的:

  angular.forEach(json, function (value, key) { //console.log(key); //console.log(value); if (value.password == "thomasTheKing") { console.log("username is thomas"); } });