Ich suche nach einer Möglichkeit, Angular grundsätzlich anzuweisen, ein Element in einer ng-Wiederholung zu überspringen, wenn es im Grunde einem Ausdruck entspricht continue
.
In der Steuerung:
$scope.players = [{
name_key:'FirstPerson', first_name:'First', last_name:'Person'
}, {
name_key:'SecondPerson', first_name:'Second', last_name:'Person'
}]
Jetzt möchte ich in meiner Vorlage alle anzeigen, die nicht übereinstimmen name_key='FirstPerson'
. Ich dachte, es müssen Filter sein, also habe ich einen Plunkr eingerichtet, um damit herumzuspielen, aber ich hatte kein Glück. Plunkr Versuch
angularjs
angularjs-ng-repeat
aron.duby
quelle
quelle
Antworten:
Wie @Maxim Shoustin vorgeschlagen hat, ist der beste Weg, um das zu erreichen, was Sie wollen, die Verwendung eines benutzerdefinierten Filters.
Es gibt aber auch andere Möglichkeiten. Eine davon besteht darin, die
ng-if
Direktive für dasselbe Element zu verwenden, in das Sie dieng-repeat
Direktive eingefügt haben (auch hier ist der Plunker ):Dies kann aus ästhetischer Sicht einen kleinen Nachteil darstellen, hat jedoch den großen Vorteil, dass Ihre Filterung auf einer Regel basieren kann, die nicht so eng an das
players
Array gekoppelt ist und auf andere Daten im Anwendungsbereich Ihrer App problemlos zugreifen kann:Update
Wie bereits erwähnt, ist dies eine der Lösungen für diese Art von Problem und kann Ihren Anforderungen entsprechen oder nicht.
Wie in den Kommentaren ausgeführt,
ng-if
handelt es sich um eine Richtlinie, die tatsächlich bedeutet, dass im Hintergrund möglicherweise mehr Dinge ausgeführt werden, als Sie erwarten.Erstellt beispielsweise
ng-if
einen neuen Bereich aus dem übergeordneten Bereich :Dies wirkt sich normalerweise nicht auf das normale Verhalten aus. Um jedoch unerwartete Fälle zu vermeiden, sollten Sie dies vor der Implementierung berücksichtigen.
quelle
Ich weiß , dass dies eine alte, aber falls jemand würde für eine andere mögliche Lösung aussehen, hier ist ein weiterer Weg , um diese zu lösen - Verwendung Standardfilterfunktionalität:
Für das TS-Beispiel sollte so etwas also funktionieren:
Keine Notwendigkeit, benutzerdefinierte Filter zu schreiben, keine Notwendigkeit,
ng-if
mit dem neuen Bereich zu verwenden.quelle
player in players | filter: { name_key: '' }
? Diese spezielle Richtlinie entspricht nicht nur Spielern ohne / eines Leerzeichensname_key
. Die Umkehrung,name_key: '!'
mit der ein Spieler mit einem nicht leeren Spieler ausgewählt werden soll,name_key
funktioniert ebenfalls nicht.ng-repeat="(key, val) in player"
Sie können beim Implementieren einen benutzerdefinierten Filter verwenden
ng-repeat
. Etwas wie:myfilter.js
::Demo Plunker
quelle