2013-07-07 9 views
34

jsfiddle http://jsfiddle.net/KfSBq/एक उप-वस्तु संपत्ति

उप वस्तु मेरा मतलब है कि वस्तुओं के साथ मैं प्रदर्शित कर रहा हूँ एनजी-दोहराने सब खुद को भीतर वस्तुओं की एक सूची शामिल करके के आधार पर एक एनजी-दोहराने सूची को फ़िल्टर करने, और मैं कर रहा हूँ उन उप-वस्तुओं में से किसी एक की संपत्ति के आधार पर फ़िल्टर करना चाहते हैं।

यह अकेला करने के लिए काफी सरल था। मैं dailies का एक उद्देश्य है, प्रत्येक युक्त एक date और वस्तुओं का एक entries सूची:

function Ctrl($scope) { 
    $scope.dailies = [{date: new Date('07/07/2013'), 
         entries: [{category: 'A', note:'Lorem ipsum'}, 
           {category: 'B', note: 'Lorem ipsum'}]}, 
         {date: new Date('05/02/2013'), 
         entries: [{category: 'A', note: 'Lorem ipsum'}]}]; 
} 

मैं उन्हें प्रदर्शित करते हैं, श्रेणी के आधार पर फ़िल्टर:

<div ng-controller="Ctrl"> 
     <div class="daily" ng-repeat="daily in dailies | orderBy:'-date' "> 
      {{ daily.date | date:'dd/MM/y' }} 
      <div class="entry" ng-repeat="entry in daily.entries | filter:{ category: 'B'} "> 
       <span>{{ entry.category }}</span>, <span>{{ entry.note }}</span> 
      </div> 
     </div> 
    </div> 

मेरे यहां मुद्दा यह है कि दैनिक वस्तुओं अब कि इसमें कोई प्रविष्टि नहीं है अभी भी प्रदर्शित हैं। मैं एक ऐसी स्थिति कैसे प्राप्त करूं, जहां फ़िल्टरिंग entriesdaily खाली की सूची बनाता है, तो daily या तो प्रदर्शित नहीं होता है?

+0

मुझे लगता है कि आपको अपना खुद का फ़िल्टर बनाना होगा – Ven

उत्तर

48

आपको अभिव्यक्तियों के अंदर नए स्कोप सदस्यों को बनाने की अनुमति है।

इससे आपको एक नए चर में फ़िल्टर की गई सूची असाइन करने की सुविधा मिलती है, जिसका उपयोग स्थानीय दायरे में किया जा सकता है। कि के साथ, आप एनजी शो करने के लिए फ़िल्टर की गई सूची की लंबाई पारित कर सकते हैं:

<body ng-app> 
    <div ng-controller="Ctrl"> 
    <div class="daily" 
     ng-repeat="daily in dailies | orderBy:'-date' " 
     ng-show="filteredEntries.length" 
    > 
     {{ daily.date | date:'dd/MM/y' }} 
     <div class="entry" 
     ng-repeat="entry in filteredEntries = (daily.entries | filter:{ category: 'B'})" 
     > 
     <span>{{ entry.category }}</span>, <span>{{ entry.note }}</span> 
     </div> 
    </div> 
    </div> 
</body> 

FIDDLE

Btw, अच्छी तरह से रखा सवाल!

+2

वाह, यह बहुत अच्छा है! फ़िल्टर काउंटर वास्तव में परिभाषित होने से पहले filteredEntries.length के रूप में देखे जाने पर थोड़ा सा अंतर्ज्ञानी उपयोग किया जाता है, लेकिन मुझे लगता है कि यह केवल कोणीय है .. – Elise

+1

यह अच्छा है। क्या फ़िल्टर किए गए एंटर्रीज़ को स्कोप वैरिएबल में श्रृंखला को ऊपर उठाने के लिए वैसे भी है, या रूटस्कोप में उदाहरण के लिए? – morgs32

+0

बहुत ही सुरुचिपूर्ण समाधान, जटिल लूपिंग कस्टम फ़िल्टर जो कि मैं एक ही चीज़ को पूरा करने के लिए लिखने की कोशिश कर रहा था, इतना आसान था। धन्यवाद! –

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