foreach循环
我在AngularJS中经历了forEach循环。有几点我不明白。
>迭代器函数的用途是什么?有没有办法没有它吗? 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"); }); }); 另一个问题:为什么上面的函数不输入,如果条件和打印“用户名是托马斯”在控制台中?
问题1& 2
所以基本上,第一个参数是要迭代的对象。它可以是一个数组或一个对象。如果是这样的对象: var values = {name: 'misko',gender: 'male'}; Angular将逐一取每个值,第一个是名称,第二个是gender。 如果你要迭代的对象是一个数组(也是可能的),像这样: [{ "Name" : "Thomas","Password" : "thomasTheKing" },{ "Name" : "Linda","Password" : "lindatheQueen" }] Angular.forEach将逐个开始从第一个对象,然后第二个对象。 对于每个这个对象,它将一个接一个,并为每个值执行一个特定的代码。这个代码称为迭代器函数。 forEach是智能的,如果您使用集合的数组,行为不同。这里有一些例子: var obj = {name: 'misko',gender: 'male'}; var log = []; angular.forEach(obj,key) { console.log(key + ': ' + value); }); // it will log two iteration like this // name: misko // gender: male 所以key是你的键的字符串值,值是…值。您可以使用键访问您的值,如下所示:obj [‘name’] =’John’ 如果这时候你显示一个数组,像这样: var values = [{ "Name" : "Thomas","Password" : "lindatheQueen" }]; angular.forEach(values,key){ console.log(key + ': ' + value); }); // it will log two iteration like this // 0: [object Object] // 1: [object Object] 因此,value是你的对象(集合),key是你的数组的索引自: [{ "Name" : "Thomas","Password" : "lindatheQueen" }] // is equal to {0: { "Name" : "Thomas",1: { "Name" : "Linda","Password" : "lindatheQueen" }} 我希望它回答你的问题。这里是一个JSFiddle运行一些代码,并测试如果你想要:http://jsfiddle.net/ygahqdge/ 调试代码 问题似乎来自事实$ http.get()是一个异步请求。 你发送一个查询你的儿子,那么当浏览器结束下载它执行成功。但是刚刚发送请求后,您使用angular.forEach执行循环,而不等待JSON的答案。 您需要在success函数中包含循环 var app = angular.module('testModule',[]) .controller('testController',['$scope','$http',$http){ $http.get('Data/info.json').then(function(data){ $scope.data = data; angular.forEach($scope.data,key){ if(value.Password == "thomasTheKing") console.log("username is thomas"); }); }); }); 这应该工作。 更深入
你可以看看deferred/promise APIs,它是Angular的一个重要概念,使平滑的平行动作。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |