2012-05-05 11 views
70

मैं AngularJS का उपयोग करके गतिशील परिभाषा सूची कैसे प्रस्तुत करूं?मैं AngularJS का उपयोग करके गतिशील परिभाषा सूची कैसे प्रस्तुत करूं?

उदाहरण:

डाटा:

[ 
    { 
     key: 'a', 
     value: 'x' 
    }, { 
     key: 'b', 
     value: 'y' 
    } 
] 

वांछित HTML:

<dl> 
    <dt>a</dt> 
    <dd>x</dd> 
    <dt>b</dt> 
    <dd>y</dd> 
</dl> 

http://docs.angularjs.org/tutorial/step_08 पर उदाहरण: DDS और एक की एक गतिशील संख्या के लिए

<dl> 
    <dt>Availability</dt> 
    <dd ng-repeat="availability in phone.availability">{{availability}}</dd> 
</dl> 

काम करता है स्थिर एनयू डीटीएस का मबर, लेकिन दोनों की गतिशील संख्या नहीं।

उत्तर

99

एक नई सुविधा जो एनजी-दोहराना शुरू/एनजी-दोहराना अंत को कोणीय 1.2 में जोड़ा गया था।

इस सुविधा के साथ, आप इस तरह अपने html लिख सकते हैं:

<dl> 
    <dt ng-repeat-start="i in items">{{i.key}}</dt> 
    <dd ng-repeat-end>{{i.value}}</dd> 
</dl> 

एक पूर्ण काम कर उदाहरण के लिए this plnkr देखें।

+0

क्या आपने इस सुविधा का उपयोग करने की कोशिश की है?मुझे त्रुटि मिली: 'TypeError: ऑब्जेक्ट # में कोई तरीका नहीं है' हैएट्रिब्यूट ' –

+2

@gevgeny एक बग प्रतीत होता है जहां आपके पास ng-repeat-start और ng-repeat-end के बीच कोई टेक्स्ट (व्हाइटस्पेस सहित) नहीं हो सकता है। यह प्लंकर काम करता है: http://plnkr.co/edit/9BhyYhQlQMRZtZKIsZ8G –

+0

ऐसा लगता है कि आप सही हैं। धन्यवाद। –

7

यह एक समस्या है, क्योंकि आपको दोहराने के लिए इसे कुछ तत्वों से लपेटने की आवश्यकता है। और वह वाला एक मान्य एचटीएमएल नहीं है - आप बिना क्रम वाली सूची या तालिकाओं के साथ एक ही मुसीबत में हैं ...

<dl> 
    <div ng-repeat="i in items"> 
    <dt>{{i.key}}</dt> 
    <dd>{{i.value}}</dd> 
    </div> 
</dl> 

मुझे लगता है कि dl अंदर div कल्पना द्वारा अनुमति नहीं है, लेकिन यह काम करता है - कम से कम में क्रोम :- डी

हम इस समर्थन के लिए एक टिप्पणी के अंदर ng-repeat का समर्थन करने की योजना बना रहे हैं।

+2

मैं अपने जवाब को स्वीकार कर रहा हूँ क्योंकि नहीं आपका कामकाज वास्तव में काम करता है (उदाहरण के लिए http://jsfiddle.net/JyWdT देखें, जो कम से कम क्रोम में काम नहीं करता है (सभी तत्वों को रंगीन होना चाहिए), लेकिन क्योंकि आप एक कोणीय डेवलपर हैं जो कहते हैं कि यह असंभव है, और इसलिए मुझे लगता है कि यह असंभव है। –

+0

थोड़ा फैनसीयर प्रदर्शन: http://jsfiddle.net/MaxNanasy/nEDyk –

+0

समस्या यह है कि एचटीएमएल आपको इन तत्वों को लपेटने की अनुमति नहीं देता है - इसके लिए कोई अनुमति तत्व नहीं है। यही कारण है कि हमारा कंपाइलर पहले से ही टिप्पणियों में निर्देशों का समर्थन करता है, ताकि हम भविष्य में टिप्पणी में परिभाषित एनजी-दोहराने की अनुमति दे सकें ... – Vojta

9

मैंने इस तरह की समस्याओं को हल करने के लिए repeatInside नामक एक निर्देश बनाया है।

<dl repeat-inside="word in dictionary"> 
    <dt>{{word.name}}</dt> 
    <dd>{{word.definition}}</dd> 
</dl> 
+1

अच्छा और सरल, मुझे यह सुझाए गए आधिकारिक "प्रारंभ"/"अंत" निर्देशों से बेहतर पसंद आया। – EventHorizon

+0

कोणीय में बहुत अच्छा काम करता है <1.2 – MANCHUCK

+0

मैंने इस उम्र पर काम नहीं किया है, मैं इस दोपहर (जीएमटी + 1) – bigblind

3

इस उत्तर कोणीय v1.2.7 में मेरे लिए काम नहीं लगता था तो मैं थोड़ा अंतर होता है कि मेरे लिए अच्छी तरह से काम पोस्ट करने के लिए चाहता था:

<dl> 
    <dt ng-repeat-start="(key, value) in items">{{key}}</dt> 
    <dd ng-repeat-end>{{value}}</dd> 
</dl> 
+0

ऐसा लगता है कि 'आइटम' एक वस्तु है, ऑब्जेक्ट्स की सरणी नहीं है ... – PhiLho