2016-12-29 6 views
0

Ich habe eine Liste von Dateiobjekten wie folgt aus:Wie filtert man basierend auf einer Eigenschaft des aktuellen Objekts?

{"name":"A1.java", "analyze":false, "index":0}, 
{"name":"A2.java", "analyze":true, "index":1}, 
{"name":"A3.java", "analyze":false, "index":2} 

Ich versuche, die Dateinamen zu zeigen, dass "analyze":true haben. Ich denke, es ist so etwas wie dies sein muss:

<div class="row"> 
    {{m.files.name | filter: m.files.analyze == true}} 
</div> 

Aber das gibt mir keinen Fehler, und es ist nichts zeigt.

Edit: Ich weiß, es gibt viele Möglichkeiten, dies zu tun, aber ich bin speziell interessiert in Filterung. Wenn Ihre Antwort nicht filtert oder warum es nicht mit Filtern durchgeführt werden kann, bitte nicht stören, ich weiß bereits, wie es geht andere Wege.

+0

Verwenden Sie 'ng-show' oder' ng-hide' Anweisungen, um dies zu erreichen. –

+0

Ich versuche, die Inline-Filterfunktionen von eckig zu lernen. Wenn ich es so machen wollte, hätte ich 'ng-repeat' benutzt. –

+0

@TravisHeeter Möchten Sie anhand einiger Benutzeraktionen filtern? d. h., wählen Sie eine Option aus einem Dropdown-Menü, die wiederum den Filter anwendet? – frishi

Antwort

1

Verwendung ng-repeat mit einem Filter alle Zeilen zu zeigen, dass, wie dies in Frage kommen:

<div ng-repeat="file in m.files | filter: {analyze: true}"> 
    {{ file.name }} 
</div> 

Oder, wenn Sie wollen einfach m.files bewerten Für eine Bedingung wie analyze = true können Sie einen benutzerdefinierten Filter wie diesen

app.filter('fileFilter', function() { 

    return function(files) { 
    var result = false; 
    angular.forEach(files, function(file) { 
     if (file.analyze) { 
     result = true; 
     } 
    }); 

    return result; 

    }; 

}); 

erstellen und es wie folgt verwenden:

<div ng-show="(m.files | filter:fileFilter)"> 
+0

OK, das ist das bisher Nächste, aber was ist, wenn ich nur alle ausgewählten Dateien anzeigen möchte, wenn sie nicht alle ausgewählt sind? Mit anderen Worten, wie kann ich diesen Filter in anderen Situationen wie "ng-show" verwenden? Zum Beispiel, ng-show = "m.files | filter {analyse: true}

+0

@TravisHeeter - Ok, ich verstehe besser, was du jetzt fragst. Ich habe meine Antwort entsprechend aktualisiert. – jbrown

+0

Eigentlich scheint der Filter nicht zu funktionieren: '

{{files.length}}
' zeigt '0'. –

0

können Sie versuchen, diese

function PersonalFilter(data){ 

    return (data.analyze)? data.name:""; 

} 

    app.filter('myFilter', function() { 
     return PersonalFilter; 
    }); 


<div class="row"> 
    {{m.files | myFilter}} 
</div> 
+0

Danke, aber gibt es keine Möglichkeit, dies mit Filtern zu tun? –

+0

Es tut mir leid, ich habe Ihren Kommentar gelesen, nachdem ich meine Lösung gepostet habe. Ich habe die Lösung geändert. Überprüfen Sie, ob diese Lösung für Sie in Ordnung ist. –

Verwandte Themen