在angularjs foreach循环
我正在通过AngularJS
的forEach
loop
。 有几点我不明白。
- 迭代器函数的用途是什么? 没有它,有什么办法可以去吗?
- 关键和价值的意义如下所示?
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.name
或value["name"]
。 与您的password
相同,您使用value.password
或value["password"]
。
下面的代码会给你你想要的:
angular.forEach(json, function (value, key) { //console.log(key); //console.log(value); if (value.password == "thomasTheKing") { console.log("username is thomas"); } });