2013-04-08 6 views
8

में समूहों को अलग करने के लिए कैसे करें मेरे पास सामान्य रूप से ng-repeat का उपयोग करके मैं दिखाना चाहता हूं। मैं कुछ ऑर्डर (आसान) में दिखाना चाहता हूं, लेकिन जब भी ऑर्डर किए गए गुण बदलते हैं, तो मुझे कुछ एचटीएमएल चाहिए।ng-repeat

उदाहरण: (Fiddle):

<div ng-app ng-controller="Main"> 
    <div ng-repeat="item in items | orderBy:'role'"> 
     {{item.role}} - {{item.name}} 
    </div> 
</div> 

function Main($scope){ 
    $scope.items = [{name: 'First', role: 1}, 
        {name: 'Second', role:2}, 
        {name: 'Third', role: 1}, 
        {name: 'Fourth', role: 2}]; 
    } 

मैं इसे प्रिंट करना चाहते हैं:

1 - पहले
1 - तीसरा
(कुछ विभाजक कोडे)
2 - दूसरा
2 - चौथा

+0

देखें कि यह मदद करता है: http://stackoverflow.com/a/14076254/215945 –

+0

@MarkRajcok धन्यवाद, यह काम करता है। लेकिन मैं एक प्रतिलिपि बनाना नहीं चाहूंगा क्योंकि कई विशेषताएं हैं जिन पर इसे आदेश दिया जा सकता है और एक विशाल डेटासेट। – Matsemann

+0

यदि आपके पास एक विशाल डेटासेट है, तो आप अपने एचटीएमएल में एक फ़िल्टर को पाइप नहीं करना चाहेंगे, जैसा कि मेरा मानना ​​है [यह प्रत्येक पाचन चक्र का मूल्यांकन किया जाएगा] (http://stackoverflow.com/a/15646675/215945)! –

उत्तर

15

आप अपने दायरे में एक फ़ंक्शन बनाना चाहते हैं।

$scope.currentRole = 'something'; 
$scope.CreateHeader = function(role) { 
     showHeader = (role!=$scope.currentRole); 
     $scope.currentRole = role; 
     return showHeader; 
} 

और फिर अपने HTML में:

<div ng-app ng-controller="Main"> 
    <div ng-repeat="item in items | orderBy:'role'"> 
     <div ng-show="CreateHeader(item.role)"> 
     something here for the header 
     </div> 
     {{item.role}} - {{item.name}} 

    </div> 
</div> 
+0

धन्यवाद, यह चाल है। मैं'ng-show = "CreateHeader (item.role) &&! $ पहले" – Matsemann

+0

"जोड़कर पहला व्यक्ति छोड़ सकता हूं .. (item.role, $ last)। फिर जब आखिरी == सत्य मैं $ scope.currentRole रीसेट करता हूं। यह एक समस्या को हल करता है जो तब होता है जब भूमिका परिवर्तित नहीं होती है (यानी दोहराव के बाद कई बार चलता है, अंतिम वाला शीर्ष जैसा होता है जो शीर्षलेख को छुपाता है)। –

+4

यह पूरी तरह से काम करता है, लेकिन अगर मैं प्रत्येक समूह को HTML तत्व के भीतर लपेटना चाहता हूं तो कैसे होगा? मेरा पहला प्रयास HTML तत्व को खोलने और बंद करने के लिए डबल CreateHeader सत्यापन करना है, लेकिन मुझे लगता है कि यह प्राप्त करने का यह सबसे अच्छा तरीका नहीं है। क्या इसके लिए कोई सुरुचिपूर्ण कामकाज है? – asumaran

1

@lucuma द्वारा समाधान केवल लूप के माध्यम से पहली बार काम करता है। यदि कोणीय सूची को रीफ्रेश करता है, तो वैरिएबल अभी भी पिछले लूप से सेट हो जाएगा।

function Main($scope){ 
    $scope.items = [{name: 'First', role: 1, header: false}, 
        {name: 'Second', role:2, header: false}, 
        {name: 'Third', role: 1, header: true}, 
        {name: 'Fourth', role: 2, header: false}]; 
} 

फिर @lucuma द्वारा एचटीएमएल काम करता है::

<div ng-app ng-controller="Main"> 
    <div ng-repeat="item in items | orderBy:'role'"> 
    <div ng-show="item.header"> // <== with this change 
     something here for the header 
    </div> 
    {{item.role}} - {{item.name}} 
    </div> 
</div> 

ओह, और आप को सॉर्ट सकता

इसके बजाय, मैं आरंभीकरण के दौरान सूची में एक नया विशेषता (जैसे कि, header) जोड़ा सूची प्रारंभ में एक बार और orderBy फ़िल्टर को हटा दें।

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