चाइल्ड एनजी-रिपीट से पैरेंट एनजी-रिपीट का एक्सेस इंडेक्स


218

मैं चाइल्ड लिस्ट (foos.bars) में एक फ़ंक्शन कॉल के तर्क के रूप में मूल सूची (फ़ॉक्स) के सूचकांक का उपयोग करना चाहता हूं।

मुझे एक पोस्ट मिली, जहां कोई $ माता-पिता का उपयोग करने की सिफारिश करता है। $ सूचकांक, लेकिन $indexइसकी कोई संपत्ति नहीं है $parent

मैं माता-पिता के सूचकांक तक कैसे पहुंच सकता हूं ng-repeat?

<div ng-repeat="f in foos">
  <div>
    <div ng-repeat="b in foos.bars">
      <a ng-click="addSomething($parent.$index)">Add Something</a>
    </div>
  </div>
</div>

2
यह मेरे लिए सही ढंग से काम करने लगता है। मैंने इसे काम करने के लिए एक प्लंकर लिखा है: plnkr.co/edit/BenCDh4NUGPPHKWGsGMr?p=preview क्या आप अधिक विवरण प्रदान कर सकते हैं?
पिरान

उसके लिये आपका धन्यवाद। इसने मुझे पहचानने में मदद की, मेरे अंक में एक बग था।
कोडर 1

@ कोडर 1, कृपया इस प्रश्न को हटाने पर विचार करें।
मार्क राजकॉक

7
@MarkRajcok मैंने कल रात इस पर विचार किया था, लेकिन यह सोचा कि यह दूसरों के लिए उपयोगी होगा कि यह कैसे करना है, इसलिए इसे छोड़ दिया।
कोडर 1

2
ठीक है, अगर आप इसे रखना चाहते हैं, तो कृपया एक उत्तर जोड़ें और इसे स्वीकार करें (इसलिए यह प्रश्न "अनुत्तरित" सूची में नहीं रहता है)।
मार्क राजकॉक

जवाबों:


279

मेरा उदाहरण कोड सही था और समस्या मेरे वास्तविक कोड में कुछ और थी। फिर भी, मुझे पता है कि इसके उदाहरणों को ढूंढना मुश्किल था इसलिए मैं इसका जवाब दे रहा हूं अगर कोई और दिख रहा है।

<div ng-repeat="f in foos">
  <div>
    <div ng-repeat="b in foos.bars">
      <a ng-click="addSomething($parent.$index)">Add Something</a>
    </div>
  </div>
</div>

13
साथ ही- इसने मुझे थोड़ी देर के लिए फेंक दिया। यदि आपके कोड के भीतर डेटा-एनजी-स्विच निर्देश है, तो आपको एक अतिरिक्त गुंजाइश स्तर पर जाना होगा- ($। $ पैरेंट। $ इंडेक्स)। सुंदर नहीं है, मुझे पता है।
बालगामी_मास्टर

माना। मुझे $ पेरेंट को पास करने की जरूरत थी। सही मूल्य प्राप्त करने के लिए मेरे कंट्रोलर फंक्शन में $ इंडेक्स। $ पेरेंट के लिए मेरे एनजी-शो को बाँध दें। $ इंडेक्स। मेरे लिए एक कोणीय बग की तरह लगता है
एंड्रयू ग्रे

क्या मैं ऐसा कुछ कर सकता हूं यदि मेरे पास एनजी-रिपीट के साथ-साथ एक संग्रह रिपीट हो जाए? जाहिर है कि वह अनिर्धारित रूप से ऐसा ही कर रहा है
अली सादिक

6
बस जोड़ने के लिए - आपको एक अतिरिक्त $ माता-पिता की आवश्यकता है, भले ही आपके पास ng-ifकोड में एक है जैसा कि मुझे अभी पता चला है।
प्लास्टर ग्रोव

@PlastyGrove इंगित करने के लिए धन्यवाद कि ng-ifआवश्यकता है और अतिरिक्त $parentसंदर्भ। मुझे कुछ सिरदर्द से बचाया।
इमिनोव जूल

219

एनजी-रिपीट डॉक्स http://docs.angularjs.org/api/ng.directive:ngRepeat के अनुसार , आप अपनी पसंद के चर में कुंजी या सरणी इंडेक्स संग्रहीत कर सकते हैं।(indexVar, valueVar) in values

तो आप लिख सकते हैं

<div ng-repeat="(fIndex, f) in foos">
  <div>
    <div ng-repeat="b in foos.bars">
      <a ng-click="addSomething(fIndex)">Add Something</a>
    </div>
  </div>
</div>

$ माता-पिता के साथ एक स्तर तक अभी भी काफी साफ है। $ सूचकांक लेकिन कई माता-पिता ऊपर, चीजें गड़बड़ हो सकती हैं।

नोट: $indexप्रत्येक दायरे में परिभाषित किया जाना जारी रहेगा, इसे प्रतिस्थापित नहीं किया जाएगा fIndex


मुझे नोट समझ में नहीं आ रहा है। क्या इस सवाल का पूरा बिंदु यह नहीं है क्योंकि यह सच नहीं है?
अडाम-बीक

16
यह मान्य उत्तर होना चाहिए क्योंकि यह $parent.$indexएक से अधिक साफ है
tdebroc

1
@ adam-beck मुझे लगता है कि उनका मतलब है कि इस (fIndex, f)पद्धति का उपयोग करते समय , $ सूचकांक को अभी भी परिभाषित नहीं किया जाएगा (छोड़ा नहीं गया) - इसलिए सूचकांक दोनों के रूप में सुलभ हो जाता है $indexऔर fIndex
सैमुअल जैशके

1
मेरे मामले के लिए, का उपयोग करना $indexकाम नहीं करता है, लेकिन fIndexकरता है जोड़ना । मेरे पास एक भी सुराग नहीं है कि काम क्यों $index नहीं करता है (यह मेरे कोड में अन्य स्थानों पर होता है), लेकिन कई दिनों तक संघर्ष करने के बाद जब मुझे यह उत्तर मिला तो मैंने देखभाल करना बंद कर दिया। जब आप एक से अधिक ng-repeatIMO होते हैं तो यह थोड़ा अधिक पठनीय होता है ।
Krøllebølle

@ Krøllebølle कारण यह है कि आप जिस तरह से इसे देखते हैं वह काम करता है यह है कि प्रत्येक ng-repeatपुनरावृत्ति अपना स्वयं का दायरा बनाता है, जो अपने स्वयं के परिभाषित भी करता है, जो $indexमाता-पिता को अधिलेखित करता है $index। यदि आप {{$index}}अंतर- ng-repeatतत्व तत्व के ठीक ऊपर या नीचे शामिल हैं , तो आपको माता-पिता का मूल्य दिखाई देगा, और इसे अंतर- ng-repeatतत्व तत्व के अंदर डालने से आपको बच्चा दिखाई देगा। इस उत्तर में दृष्टिकोण का उपयोग करते हुए बस मूल सूचकांक को एक चर के लिए असाइन किया जाता है जिसका नाम आपने चुना है ( fIndex) इसलिए यह एक बच्चे के दायरे द्वारा अधिलेखित नहीं होगा।
तवनाब

44

एक ऐसे ही सवाल के मेरे जवाब पर एक नज़र डालें ।
अलियासिंग करके $indexहमें पागल सामान लिखने की ज़रूरत नहीं है $parent.$parent.$index


रास्ता अधिक सुरुचिपूर्ण समाधान whan $parent.$indexउपयोग कर रहा है एनजी-init :

<ul ng-repeat="section in sections" ng-init="sectionIndex = $index">
    <li  class="section_title {{section.active}}" >
        {{section.name}}
    </li>
    <ul>
        <li class="tutorial_title {{tutorial.active}}" ng-click="loadFromMenu(sectionIndex)" ng-repeat="tutorial in section.tutorials">
            {{tutorial.name}}
        </li>
    </ul>
</ul>

प्लंकर: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS??==fo


3
यह भी सुरक्षित है! यदि आप लूप के अंदर एनजी-अगर जोड़ते हैं, तो आपको $ इंडेक्स गड़बड़ हो जाता है, चेक करें: plnkr.co/52oIhLfeXXI9ZAynTuAJ
gonzalon

मुझे सेक्शनइंडेक्स = $ पेरेंट करना था। $ इंडेक्स
बीनवाह

यदि आप किसी ऐसे तत्व को हटाते हैं जो रिपीट ऐरे में था, तो वेरिएबल अपडेट नहीं होता है। $ इंडेक्स और $ पेरेंट। $ इंडेक्स हमेशा सुरक्षित विकल्प है
भरत भंडारकर

12

आप निम्न कोड द्वारा ग्रैंड पैरेंट इंडेक्स का नियंत्रण भी प्राप्त कर सकते हैं

$parent.$parent.$index

1
यह मेरे प्रोजेक्ट के लिए अच्छा काम करता है। भयानक समाधान प्रदान करने के लिए धन्यवाद!
कैनेट रॉबर्न

यह एक्स्टेंसिबल नहीं है, जाहिरा तौर पर।
गणेश वेल्लंकी

दुर्भाग्य से, यह कुछ हद तक ईर्ष्या और जाहिर तौर पर समस्याग्रस्त कई मामलों का उदाहरण है।
चीफवूवेन्सिल्स

2

आप बस $ पैरेंट का उपयोग कर सकते हैं। $ इंडेक्स। हर जगह अभिभावक दोहराई जाने वाली वस्तु का प्रतिनिधित्व करेगा।


0

कई माता-पिता होने पर $ माता-पिता काम नहीं करते हैं। इसके बजाय हम एक पेरेंट इंडेक्स वेरिएबल इनिट को परिभाषित कर सकते हैं और उसका उपयोग कर सकते हैं

<div data-ng-init="parentIndex = $index" ng-repeat="f in foos">
  <div>
    <div data-ng-init="childIndex = $index" ng-repeat="b in foos.bars">
      <a ng-click="addSomething(parentIndex)">Add Something</a>
    </div>
  </div>
</div>

वुकलूर से उत्तर देखें यहाँ भी इसका उल्लेख है। सामान्य तौर पर यह IMO जाने का सही तरीका है और आम तौर पर केवल एनजी-इनिट के लिए उचित उपयोग होता है। जब भी आपके कोड के संदर्भ में बदलाव होता है, तो लोग $ मां-बाप के पास पहुंच जाते हैं।
शौहुसैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.