2013-02-02 24 views
43

साथ छोरों के अंदर लेबल का उपयोग करने के लिए तो मैं इस तरह एक ng-repeat अंदर हूँ:कैसे AngularJS

<li ng-repeat="x in xs"> 
    <form> 
     <label for="UNIQUELABEL">name</label> 
     <input id="UNIQUELABEL"> 
     <label for="ANOTHERUNIQUELABEL">name2</label> 
     <input id="ANOTHERUNIQUELABEL"> 
    </form> 
</li> 

कौन सा तरह

<li> 
    <form> 
     <label for="UNIQUELABEL1">name</label> 
     <input id="UNIQUELABEL1"> 
     <label for="ANOTHERUNIQUELABEL1">name2</label> 
     <input id="ANOTHERUNIQUELABEL1"> 
    </form> 
</li> 
<li> 
    <form> 
     <label for="UNIQUELABEL2">name</label> 
     <input id="UNIQUELABEL2"> 
     <label for="ANOTHERUNIQUELABEL2">name2</label> 
     <input id="ANOTHERUNIQUELABEL2"> 
    </form> 
</li> 
... 

मैं AngularJS के लिए नए और के बारे में सुनिश्चित नहीं कर रहा हूँ कुछ प्रस्तुत करना चाहिए इस तक पहुंचने का सही तरीका (दस्तावेज़ों में से कोई भी label का उपयोग नहीं करता है)।

उत्तर

27

के बाद से ng-repeat प्रत्येक यात्रा पर एक नया गुंजाइश वस्तु प्रदान करता है, मैं

की तरह कुछ का उपयोग करना पसंद जोड़ने की जरूरत
<li ng-repeat="x in xs"> 
    <form> 
     <label for="UNIQUELABEL{{::$id}}_1">name</label> 
     <input id="UNIQUELABEL{{::$id}}_1"> 
     <label for="UNIQUELABEL{{::$id}}_2">name2</label> 
     <input id="UNIQUELABEL{{::$id}}_2"> 
    </form> 
</li> 

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

+0

इस तरह बेहतर है। यह अन्य उपयोग-मामलों पर लागू होता है जहां कोई एनजी-दोहराना नहीं है लेकिन आपको विश्व स्तर पर अद्वितीय आईडी आश्वस्त करने की आवश्यकता है। बस UNIQUELABEL रखना याद रखें .._ 1 भाग अनगिनत गुंजाइश के भीतर अद्वितीय है जिसमें आप हैं। –

+0

सहमत हैं कि यह स्वीकृत उत्तर से बेहतर है। स्वीकार्य उत्तर उसमें दोषपूर्ण है यदि उस स्निपेट का उपयोग तत्व निर्देश के अंदर किया गया था और कहा गया था कि एक पृष्ठ पर निर्देश एक से अधिक बार उपयोग किया गया था, तो आप उसी आईडी वाले तत्वों के साथ समाप्त हो जाएंगे! – Groady

+0

मेरा मानना ​​है कि $ आईडी के बजाय $ इंडेक्स का उपयोग किया जाना चाहिए। प्रत्येक आईडी के लिए $ आईडी अद्वितीय है, प्रत्येक आइटम पुनरावृत्ति में नहीं है। – GeekyMonkey

39

सही समाधान Gleno है।

$id प्रत्येक निर्मित स्कोप के लिए अद्वितीय होने की गारंटी है, जबकि $index अंडरलाइनिंग संग्रह की गणना में किसी भी बदलाव के साथ परिवर्तन करता है।

आप $ सूचकांक संपत्ति (शून्य आधारित) कि पुनरावर्तक में गुंजाइश पर उपलब्ध है

<li ng-repeat="x in xs"> 
    <form> 
     <label for="UNIQUELABEL{{$index+1}}">name</label> 
     <input id="UNIQUELABEL{{$index+1}}"> 
     <label for="ANOTHERUNIQUELABEL{{$index+1}}">name2</label> 
     <input id="ANOTHERUNIQUELABEL{{$index+1}}"> 
    </form> 
</li> 
10

कई परिदृश्यों के लिए, <input> दोनों को एक बेहतर समाधान और <label> तत्व में लेबल लेबल को एक बेहतर समाधान हो सकता है। यह पूरी तरह से वैध HTML है, सभी ब्राउज़रों में ठीक से काम करता है, और, श्रेणीबद्ध डेटा के साथ उपयोग करने के लिए जब से तुम iterator चर का उपयोग करने की जरूरत नहीं आसान होने का अतिरिक्त लाभ है:

<li ng-repeat="x in xs"> 
    <label> 
     Label Text 
     <input type="text"> 
    </label> 
</li> 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^