AngularJs में केवल X बार दोहराव एनजी दोहराएं


86

मैं कैसे की तरह एनजी-दोहराने का उपयोग कर सकते के लिए जावास्क्रिप्ट में?

उदाहरण:

<div ng-repeat="4">Text</div>

मैं 4 बार एनजी-रिपीट के साथ पुनरावृति करना चाहता हूं लेकिन मैं यह कैसे कर सकता हूं?


3
दोनों संभव हैं: निर्देशों में ऊँट के नाम जैसे ऊँट के नाम हैं। इन विशेष पात्रों के साथ ऊंट मामले के नाम को सांप के मामले में अनुवाद करके निर्देश को लागू किया जा सकता है:, -, या _। वैकल्पिक रूप से निर्देश को x- या डेटा के साथ उपसर्ग किया जा सकता है - इसे HTML सत्यापनकर्ता के अनुरूप बनाने के लिए।
1923

2
वाह, कितने गलत उत्तर आए, आपको एनजी-रिपीट = "आइटम इन आइटम्स का उपयोग करना चाहिए। सीमा: 4: 4"
टूलकिट

एक मौका है कि वह किसी भी सरणी को खत्म करने के लिए नहीं मिला है। कहते हैं, सितारों को एक स्टार रेटिंग में प्रदर्शित करने के लिए। आपके लिए कितने सितारों को प्रदर्शित करने की आवश्यकता है, इसके लिए एक क्षेत्र हो सकता है, लेकिन यह चलने योग्य नहीं है।
नीरजुल

@ टूलकिट ... और क्या है items..?
TJ

जवाबों:


342

कोणीय एक सीमा के साथ आता है: सीमा फ़िल्टर, यह पहले एक्स आइटम और अंतिम एक्स आइटम को सीमित करने का समर्थन करता है:

<div ng-repeat="item in items|limitTo:4">{{item}}</div>

14
यह उत्तर होना चाहिए, क्योंकि यह एक सरणी में वस्तुओं पर पुनरावृति के साथ भी काम करता है। इसके अलावा एक कोणीय सुविधा।
एशले कूलमैन

29
यह कोड का एक अविश्वसनीय रूप से उपयोगी टुकड़ा है, लेकिन यह वास्तव में ओपी के प्रश्न को संतुष्ट नहीं करता है। वह बस एन बार दोहराने के लिए एक रास्ता तलाश कर रहा है, और संभावना है कि उस पर पुनरावृति करने के लिए एक वास्तविक वस्तु नहीं है।
समहुबाई १६'१४ को १६:०४

2
इसका उत्तर होना चाहिए, यह AngularJS core
Udo

10
यह वास्तव में समस्या को हल नहीं करता है। आप यह सोचते हैं कर रहे हैं वह एक वस्तु का नाम दिया हैitems
बैटमैन

1
वास्तव में प्रश्न के लिए उपयोगी उत्तर नहीं (मैं विशेष रूप से एक्स काल को पुन: व्यवस्थित करने के लिए कैसे googled, और एक्स को सीमित नहीं करता) लेकिन फिर भी कोड का उपयोगी टुकड़ा।
मैकके

65

यह सबसे सरल वर्कअराउंड है जिसके बारे में मैं सोच सकता था।

<span ng-repeat="n in [].constructor(5) track by $index">
{{$index}}
</span>

यहाँ एक प्लंकर उदाहरण है।


2
चारों ओर बैठे नियंत्रक में किसी भी फ़ंक्शन का उपयोग किए बिना चतुर और बहुत उपयोगी है। फिर भी
चकराया

1
इसका उत्तर होना चाहिए । ओपी ने "एनजी-रिपीट लाइक फॉर यूज" के लिए कहा। इसका तात्पर्य है कि नियंत्रक से किसी भी "सहायता" के बिना, सीधे कार्यान्वयन में सभी शामिल हैं। यह समाधान ठीक वैसा ही करता है ... और बूट के लिए खूनी चालाक है।
karfus

अच्छा है, लेकिन सभी कोणीय संस्करणों पर काम नहीं करता है। मैं 1.2.9 का उपयोग कर रहा हूँ और यह समर्थित नहीं है:Error: [$parse:isecfld]
Emaborsa

50

आप जावास्क्रिप्ट सरणी ऑब्जेक्ट में स्लाइस विधि का उपयोग कर सकते हैं

<div ng-repeat="item in items.slice(0, 4)">{{item}}</div>

लघु एन मीठा


2
यह गलत क्यों है ?. यह काम करता हैं। चलो एक और परिदृश्य लेते हैं, यदि आप सरणी अनुक्रमित से 2 से 4 तक के तत्व चाहते हैं। क्या यह सीमा फ़िल्टर के साथ काम करता है?
गिहान

4
यह गलत नहीं है क्योंकि यह आसान नहीं हैitem in items|limitTo:4
CENT1PEDE

1
यह उस कार्यक्षमता को जोड़ता है जिसे मैं 1-4 आइटम दिखा सकता था, फिर एक साधारण पेजिनेटर के लिए अनुमति देता है .slice (0,4) से .slice (5,8) पर क्लिक करें। धन्यवाद!
BaneStar007

39

html में:

<div ng-repeat="t in getTimes(4)">text</div>

और नियंत्रक में:

$scope.getTimes=function(n){
     return new Array(n);
};

http://plnkr.co/edit/j5kNLY4Xr43CzcjM1gkj

संपादित करें:

angularjs के साथ> 1.2.x

<div ng-repeat="t in getTimes(4) track by $index">TEXT</div>

19
अन्य विकल्प: t in [1,2,3,4]या t in 'aaaa' आदि :)
वैलेंटाइन श्येनोवोव

4
अजीब लगता है कि इसे वापस करने के लिए फंक्शन की आवश्यकता के बिना कोणीय गणितीय लूप का समर्थन नहीं कर सकता है।
गुइडो एंसेलमी

4
हाँ, मैं 30x को पुनरावृत्त करने की कल्पना कर सकता हूं, इसे लिख रहा हूं [1,2,3,4].. यह एक निराशाजनक समाधान क्या है
मतिज

2
बेहतर समाधान के लिए डेविडलिन द्वारा नीचे दिए गए उत्तर को देखें।
समाहुबाई

@SamHuckaby समस्या एक सीमा से अधिक हो रही है। उस स्थिति में, यह बेकार है। यह मानों के एक सेट पर पुनरावृत्ति करने के बारे में नहीं है जो अपने आप में कुछ का मतलब है, यह उदाहरण के लिए 4 बार पुनरावृत्ति कर रहा है। मौजूदा सरणी के एक स्लाइस पर 4 बार, सिर्फ 4 बार। जब आप एक एडहॉक स्लाइस बनाते हैं, जैसे "[0..4]" कोऑफिसस्क्रिप्ट में, तो आप वास्तव में वास्तविक मूल्यों की परवाह नहीं करते हैं, बस एक ऑपरेशन को 4 बार दोहराएंगे।
mpm

13

@Mpm द्वारा दिया गया उत्तर काम नहीं कर रहा है यह त्रुटि देता है

एक पुनरावर्तक में डुप्लिकेट की अनुमति नहीं है। अद्वितीय कुंजियों को निर्दिष्ट करने के लिए 'ट्रैक बाय एक्सप्रेशन' का उपयोग करें। पुनरावर्तक: {0}, डुप्लिकेट कुंजी: {1}

साथ ही इससे बचने के लिए

एनजी-रिपीट = "टी इन गेटटाइम्स (4)"

उपयोग

$ सूचकांक द्वारा ट्रैक

इस तरह

<div ng-repeat = "t in getTimes (4) track by $ index"> TEXT </ div>


मेरी तकनीक ने मुझे इस्तेमाल किए जाने वाले एंगुलरज के संस्करण के साथ काम किया। बस प्लंकर की जांच करें, मैं इसे अपडेट करूंगा।
mpm

10

7 बार दोहराने के लिए , लंबाई = 7 के साथ एक सरणी का उपयोग करने का प्रयास करें , फिर इसे $ सूचकांक द्वारा ट्रैक करें :

<span ng-repeat="a in (((b=[]).length=7)&&b) track by $index" ng-bind="$index + 1 + ', '"></span>

b=[]एक खाली ऐरे बनाएँ «बी»,
.length=7इसे आकार दें «7»,
&&bनए एरे «बी» को एनजी-रिपीट के लिए उपलब्ध होने दें,
track by $indexजहां «$ इंडेक्स» पुनरावृति की स्थिति है।
ng-bind="$index + 1"1 पर प्रदर्शन शुरू।

X बार दोहराने के लिए :
बस 7 को X से बदलें ।


अस्पष्ट रूप में यह उत्तर क्या प्रदान करता है जो पहले से ही स्वीकृत उत्तर या दो उच्च मत वाले लोगों द्वारा कवर नहीं किया गया है।
जेम्सटाउन

एंगुलर कितना शक्तिशाली हो सकता है इससे ज्यादा कुछ नहीं।
फनीनिको 15

3
दो उच्च मतों के उत्तर से लगता है कि «आइटम» एक सरणी है। यह एक जगह सरणी बना देता है।
फेनिनिको

अच्छा किया, यह काम करता है। यह एकमात्र समाधान है जो वास्तव में ओपी के प्रश्न को संबोधित करता है। यह आश्चर्यजनक है कि इसमें केवल कुछ वोट हैं। मुझे आश्चर्य होता है कि क्या अधिक सुरुचिपूर्ण समाधान है।
हीलफॉरग्रीन

3

यहाँ सभी उत्तर यह मानते हैं कि आइटम एक सरणी है। हालाँकि, AngularJS में, यह एक वस्तु भी हो सकती है। उस स्थिति में, न तो सीमा के साथ फ़िल्टर करना और न ही array.slice काम करेगा। एक संभव समाधान के रूप में, आप अपनी वस्तु को एक सरणी में बदल सकते हैं, अगर आपको ऑब्जेक्ट कुंजियों को खोने का मन नहीं है। यहाँ एक फिल्टर का एक उदाहरण है कि:

myFilter.filter('obj2arr', function() {
    return function(obj) {
        if (typeof obj === 'object') {
            var arr = [], i = 0, key;
            for( key in obj ) {
                arr[i] = obj[key];
                i++;
            }
            return arr;
        }
        else {
            return obj;
        }

    };
});

एक बार जब यह एक सरणी है, तो स्लाइस या लिमिटेटो का उपयोग करें, जैसा कि अन्य उत्तरों में कहा गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.