का उपयोग करते हुए $index
बुनियादी मामलों में काम करता है पूरी तरह से अच्छी तरह से, और @ charlietfl का जवाब बहुत अच्छा है। लेकिन कभी-कभी, $index
पर्याप्त नहीं है।
कल्पना कीजिए कि आपके पास एक एकल सरणी है, जिसे आप दो अलग-अलग एनजी-रिपीट में प्रस्तुत कर रहे हैं। उन एनजी-रिपीट में से एक को उन वस्तुओं के लिए फ़िल्टर किया जाता है जिनके पास एक सत्य संपत्ति है, और दूसरे को झूठी संपत्ति के लिए फ़िल्टर किया गया है। दो अलग-अलग फ़िल्टर किए गए सरणियाँ प्रस्तुत की जा रही हैं, जो एक मूल सरणी से प्राप्त होती हैं। (या, अगर यह कल्पना करने में मदद करता है: शायद आपके पास लोगों का एक ही सरणी है, और आप उस सरणी में महिलाओं के लिए एक एनजी-दोहराना चाहते हैं, और उसी सरणी में पुरुषों के लिए एक और ।) आपका लक्ष्य: मज़बूती से हटाएं। फ़िल्टर किए गए सरणियों के सदस्यों की जानकारी का उपयोग करते हुए मूल सरणी।
उन फ़िल्टर किए गए सरणियों में से प्रत्येक में, $ सूचकांक मूल सरणी के भीतर आइटम का सूचकांक नहीं होगा। यह फ़िल्टर किए गए उप-सरणी में सूचकांक होगा । इसलिए, आप उस व्यक्ति के इंडेक्स को मूल people
सरणी में नहीं बता पाएंगे , आप केवल $ इंडेक्स को उप women
या men
सरणी से जान पाएंगे । उस का उपयोग करके हटाने का प्रयास करें, और आपके पास हर जगह से आइटम गायब हो जाएंगे, जहां आप चाहते थे। क्या करें?
यदि आप बहुत भाग्यशाली हैं कि डेटा मॉडल का उपयोग करना प्रत्येक ऑब्जेक्ट के लिए एक अद्वितीय पहचानकर्ता शामिल है, तो उस ऑब्जेक्ट को खोजने के लिए $ इंडेक्स के बजाय इसका उपयोग करें और splice
इसे मुख्य सरणी से बाहर करें। (नीचे मेरे उदाहरण का उपयोग करें, लेकिन उस विशिष्ट पहचानकर्ता के साथ।) लेकिन अगर आप इतने भाग्यशाली नहीं हैं?
कोणीय वास्तव में प्रत्येक आइटम को एनजी-दोहराया सरणी (मुख्य, मूल सरणी में) में एक अद्वितीय संपत्ति कहा जाता है $$hashKey
। आप $$hashKey
जिस आइटम को हटाना चाहते हैं, उस पर एक मैच के लिए मूल सरणी खोज सकते हैं और इस तरह से छुटकारा पा सकते हैं।
ध्यान दें कि $$hashKey
एनजी-रिपीट के लिए प्रकाशित एपीआई में एक कार्यान्वयन विवरण नहीं है। वे किसी भी समय उस संपत्ति के लिए समर्थन को हटा सकते थे। लेकिन शायद नहीं। :-)
$scope.deleteFilteredItem = function(hashKey, sourceArray){
angular.forEach(sourceArray, function(obj, index){
// sourceArray is a reference to the original array passed to ng-repeat,
// rather than the filtered version.
// 1. compare the target object's hashKey to the current member of the iterable:
if (obj.$$hashKey === hashKey) {
// remove the matching item from the array
sourceArray.splice(index, 1);
// and exit the loop right away
return;
};
});
}
के साथ आमंत्रित करें:
ng-click="deleteFilteredItem(item.$$hashKey, refToSourceArray)"
संपादित करें: इस तरह के एक फ़ंक्शन का उपयोग करना, जो $$hashKey
मॉडल-विशिष्ट संपत्ति के नाम के बजाय चाबियाँ , इस फ़ंक्शन को विभिन्न मॉडलों और संदर्भों में पुन: प्रयोज्य बनाने का महत्वपूर्ण अतिरिक्त लाभ भी है। इसे अपने सरणी संदर्भ, और आपके आइटम संदर्भ के साथ प्रदान करें, और यह सिर्फ काम करना चाहिए।