एक बूलियन संपत्ति द्वारा "ट्रैक द्वारा" के साथ एक कोणीय 1.2 एनजी-दोहराने को छानना


80

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

$scope.attendees = [
     {"firstname":"Steve",    "lastname":"Jobs",  "arrived":true,  "id":1}
    ,{"firstname":"Michelle", "lastname":"Jobs",  "arrived":false, "id":2}
    ,{"firstname":"Adam",     "lastname":"Smith", "arrived":true,  "id":3}
    ,{"firstname":"Megan",    "lastname":"Smith", "arrived":false, "id":4}
    ,{"firstname":"Dylan",    "lastname":"Smith", "arrived":false, "id":5}
    ,{"firstname":"Ethan",    "lastname":"Smith", "arrived":false, "id":6}
];

निम्नलिखित एनजी-रिपीट फ़िल्टरिंग का उपयोग करना:

<ul>
    <li ng-repeat="person in attendees track by person.id | filter:arrived:'false'">
            {{person.lastname}}, {{person.firstname}}
    </li>
</ul>

मुझे लगता है कि मैंने प्रत्येक क्रमांकन की कोशिश की है जिसे मैं संदर्भित पा सकता हूं, जिनमें से अधिकांश विभिन्न स्टैकऑवरफ़्लो खोज परिणामों से आए थे:

  • filter:'arrived'
  • filter:arrived
  • filter:'person.arrived'
  • filter:person.arrived
  • filter:{arrived:true}
  • filter:{arrived:'true'}
  • filter:{person.arrived:true}
  • filter:{person.arrived:'true'}

मैंने एक कस्टम फ़िल्टर फ़ंक्शन बनाने की भी कोशिश की है:

$scope.isArrived = function(item) {
    return item.arrived;
};

और इस प्रकार इसे लागू करना:

  • filter:isArrived
  • filter:'isArrived'
  • filter:{isArrived(person)}
  • filter:isArrived(person)
  • filter:'isArrived(person)'

इनमें से कोई भी काम नहीं करता है। मैं क्या खो रहा हूँ?

यहाँ एक plnkr है जो मेरी समस्या को प्रदर्शित करता है

जवाबों:


252

अभिव्यक्ति के अंत में ट्रैक करने की आवश्यकता है:

<li ng-repeat="person in attendees | filter: {arrived: false } track by person.id">

3
कैसे flipping कष्टप्रद, और 30 मिनट की बर्बादी। मेरी इच्छा है कि इसका इस्तेमाल किया जाए trackBy: ..और सामान्य रूप से "हर चीज की तरह" काम किया जाए।
user2864740

यह एक बहुत महत्वपूर्ण मुद्दा है। अद्वितीय मानों द्वारा ट्रैकिंग जो कि अधिकांश प्रमुख पात्रों के लिए काफी हद तक समान थी, हमें एक डुप्लिकेट त्रुटि मिल रही थी क्योंकि ट्रैक अभिव्यक्ति में अंतिम नहीं था। बहुत अस्पष्ट त्रुटि imo।
मैट एस

2

@ ग्रूफ़ का उत्तर सही है, लेकिन केवल आधिकारिक स्रोत से उत्तर देने के लिए:

कोणीय ng-repeatडॉक्स से :

नोट: track byहमेशा अंतिम अभिव्यक्ति होनी चाहिए :

<div ng-repeat="model in collection | orderBy: 'id' as filtered_result track by model.id">
  {{model.name}}
</div>

यह डॉक्स के "तर्क" भाग पर भी दिखाई देता है:

ध्यान दें कि ट्रैकिंग एक्सप्रेशन को अंतिम रूप से, किसी भी फ़िल्टर और अन्य एक्सप्रेशन के बाद आना चाहिए।

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