प्रश्न 1 और 2
तो मूल रूप से, पहला पैरामीटर उस पर पुनरावृति करने के लिए ऑब्जेक्ट है। यह एक सरणी या एक वस्तु हो सकती है। यदि यह इस तरह एक वस्तु है:
var values = {name: 'misko', gender: 'male'};
कोणीय प्रत्येक मान एक के बाद एक पहले एक नाम लेगा, दूसरा लिंग है।
यदि आपकी वस्तु पर चलना एक सरणी है (संभव भी है), इस तरह:
[{ "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
तो कुंजी आपकी कुंजी का स्ट्रिंग मान है और मान है ... मान। आप इस तरह से अपने मूल्य का उपयोग करने के लिए कुंजी का उपयोग कर सकते हैं: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]
तो मान आपकी वस्तु (संग्रह) है, और कुंजी आपके सरणी का सूचकांक है:
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
{ "Name" : "Linda", "Password" : "lindatheQueen" }]
// is equal to
{0: { "Name" : "Thomas", "Password" : "thomasTheKing" },
1: { "Name" : "Linda", "Password" : "lindatheQueen" }}
मुझे आशा है कि यह आपके प्रश्न का उत्तर देगा। यहाँ एक JSFiddle कुछ कोड और परीक्षण चलाने के लिए यदि आप चाहते हैं: http://jsfiddle.net/ygahqdge/
अपना कोड डीबग करना
समस्या इस तथ्य से आती है कि यह $http.get()
एक अतुल्यकालिक अनुरोध है।
आप अपने बेटे पर एक प्रश्न भेजने के लिए, तब जब आप ब्राउज़र अंत को डाउनलोड करने से यह सफलता पर अमल। लेकिन अपने अनुरोध को भेजने के बाद ही 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 को स्थगित / वादा पर एक नज़र दे सकते हैं , यह सहज अतुल्यकालिक क्रियाएं बनाने के लिए कोणीय की एक महत्वपूर्ण अवधारणा है।
success
अपने होने की प्रतीक्षा नहीं कर रहे हैं$http.get()
, इस प्रकार, जबangular.forEach()
होता है, तब$scope.data
भी अपरिभाषित होता है।