नॉकआउट जेएस कंटेनर रहित बाइंडिंग सिंटैक्स
कृपया मेरे साथ एक दूसरे को सहन करें: नॉकआउट जेएस बाध्यकारी दस्तावेज के foreachनोट 4 में चर्चा के अनुसार अपने बंधन के लिए एक कंटेनर रहित बंधन सिंटैक्स का उपयोग करने का एक अति सुविधाजनक विकल्प प्रदान करता है foreach।
http://knockoutjs.com/documentation/foreach-binding.html
जैसा कि नॉकआउट प्रलेखन उदाहरण दिखाता है, आप इस तरह से नॉकआउटJS में अपनी बाध्यकारी लिख सकते हैं:
<ul>
<li class="header">Header item</li>
<!-- ko foreach: myItems -->
<li>Item <span data-bind="text: $data"></span></li>
<!-- /ko -->
</ul>
मुझे लगता है कि यह दुर्भाग्यपूर्ण है कि AngularJS इस प्रकार के सिंटैक्स की पेशकश नहीं करता है।
कोणीय का ng-repeat-startऔरng-repeat-end
ng-repeatसमस्याओं को हल करने के लिए AngularJS तरीके से , मेरे पास जो सैंपल आते हैं, वे उनके (सहायक) उत्तर में लिखे गए jmagnusson प्रकार के होते हैं।
<li ng-repeat-start="page in [1,2,3,4,5]"><a href="#">{{page}}</a></li>
<li ng-repeat-end></li>
इस वाक्यविन्यास को देखने पर मेरा मूल विचार है: वास्तव में? क्यों कोणीय यह सब अतिरिक्त मार्कअप मजबूर कर रहा है कि मैं कुछ नहीं करना चाहता और नॉकआउट में इतना आसान है? लेकिन फिर jmagnusson के जवाब में hitautodestruct की टिप्पणी ने मुझे आश्चर्यचकित करना शुरू कर दिया: अलग-अलग टैग पर एनजी-रिपीट-स्टार्ट और एनजी-रिपीट-एंड के साथ क्या उत्पन्न हो रहा है?
उपयोग करने के लिए एक क्लीनर तरीका ng-repeat-startऔरng-repeat-end
हाईटूटोडस्ट्रक्ट के दावे की जांच ng-repeat-endकरने पर, एक अलग टैग पर जोड़ना बिल्कुल वही है जो मैं ज्यादातर मामलों में नहीं करना चाहता, क्योंकि यह पूरी तरह से उपयोगहीन तत्व उत्पन्न करता है: इस मामले में, <li>उनमें कुछ भी नहीं के साथ आइटम। बूटस्ट्रैप 3 की पृष्ठबद्ध सूची सूची आइटमों को स्टाइल करती है ताकि ऐसा लगे कि आपने कोई सुपरफ्लस आइटम नहीं बनाया है, लेकिन जब आप जेनरेट किए गए HTML का निरीक्षण करते हैं, तो वे वहां मौजूद होते हैं।
सौभाग्य से , आपको एक क्लीनर समाधान और html की एक छोटी राशि के लिए बहुत कुछ करने की आवश्यकता नहीं है: बस ng-repeat-endउसी HTML टैग पर घोषणा को रखें जो कि हैng-repeat-start ।
<ul class="pagination">
<li>
<a href="#">«</a>
</li>
<li ng-repeat-start="page in [1,2,3,4,5]" ng-repeat-end><a href="#"></a></li>
<li>
<a href="#">»</a>
</li>
</ul>
इससे 3 फायदे मिलते हैं:
- लिखने के लिए कम html टैग
- बेकार, खाली टैग कोणीय द्वारा उत्पन्न नहीं होते हैं
- जब दोहराने के लिए सरणी खाली है, तो टैग के साथ
ng-repeatउत्पन्न नहीं होगा, आपको एक ही लाभ दे रहा है नॉकआउट के कंटेनर रहित बंधन आपको इस संबंध में देता है
लेकिन अभी भी एक क्लीनर तरीका है
आगे कोणीय, के लिए इस मुद्दे पर GitHub में टिप्पणी समीक्षा करने के बाद https://github.com/angular/angular.js/issues/1891 ,
आप का उपयोग करने की जरूरत नहीं ng-repeat-startहै और ng-repeat-endएक ही फायदे प्राप्त करने के लिए। इसके बजाय, फिर से jmagnusson के उदाहरण के लिए धन्यवाद, हम बस जा सकते हैं:
<ul class="pagination">
<li>
<a href="#">«</a>
</li>
<li ng-repeat="page in [1,2,3,4,5,6]"><a href="#">{{page}}</a></li>
<li>
<a href="#">»</a>
</li>
</ul>
तो कब इस्तेमाल करें ng-repeat-startऔर ng-repeat-end? कोणीय प्रलेखन के अनुसार , करने के लिए
... तत्वों की एक श्रृंखला को केवल एक मूल तत्व के बजाय दोहराएं ...
पर्याप्त बात, कुछ उदाहरण दिखाओ!
काफी उचित; जब आप करते हैं और जब आप ng-repeat-endएक ही टैग पर उपयोग नहीं करते हैं, तो यह jsbin पांच उदाहरणों से चलता है ।