Winkel: Reinclude null-Werte, wenn die filter-parameter ist leer
Ich habe eine ziemlich einfache textbox
Filterung eines ng-repeat
auf einige ungeordnete li
s. Wenn ich einen Wert um die textbox
Elemente mit der null
Werte werden gelöscht und nicht zurück, auch wenn die textbox
deaktiviert ist. Ich habe eine Idee warum dies passiert ist (die suchen-Objekt hat jetzt eine leere Eigenschaft, die nicht mit der nulls
), aber ich kann nicht herausfinden, wie das problem zu lösen. Ich habe versucht, zu pop()
die Eigenschaft der Suche nach Objekt mit kein Glück.
HTML:
<div ng-controller="ListCtrl">
<input type="text" ng-model="search.age" placeholder="Age"></input>
<ul>
<li ng-repeat="item in items | filter:search">
{{item.name}} - {{item.age}}
</li>
</ul>
</div>
JS:
function ListCtrl($scope) {
$scope.items = [
{'name':'Carl', 'age':69},
{'name':'Neil', 'age':54},
{'name':'Richard'},
{'name':'Chris', 'age':58}
];
}
Bitte der Kasse die JSfiddle zur besseren Veranschaulichung des Problems.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich es herausgefunden mit Hilfe dieser Antwort. Wenn ich fügen Sie einfach ein
ng-change
dem Textfeld kann ich sehen, die einen leeren Wert unddelete
Eigentum.HTML:
JS:
Aktualisiert fiddle. Ich bin mir bewusst, das aktuelle
if
verhindert, dass ein Benutzer-Filter auf einen einzigen Raum, aber bisher scheint dies nicht zu einem problem für mich.BONUS:
!
zurücknull
Werte und!!
zurück nichtnull
Werte.Die sauberste Lösung, die ich gefunden habe, ist das schreiben einer benutzerdefinierten Richtlinie ändern, das Eingabefeld Verhalten wie diese:
Und verwenden Sie es wie folgt:
Ändern Sie die input ng-model:
Fügen Sie diese zu Ihrem controller:
Und entweder von diesen arbeiten in Ihren html-repeat:
Oder
jsfiddle
Werden Sie nicht in der Lage zu verwenden-filter:Suche. Blick auf die Winkel-code, wenn Ihr obj mit einem unbestimmten Alter gefiltert wird (auch wenn die Eingabe leer ist), wird es fallen, über diese switch-Anweisung und immer false zurückgeben. Dieser Schalter nicht genannt, bekommen das erste mal Ihre ng-repeat laufen, weil
$scope.search.age
ist nicht definiert. Nach Ihrer ersten Einreise in die input-und Lösch es raus, jetzt$scope.search.age
ist ein leerer string...also den filter immer laufen.Können Sie versuchen schreiben Sie Ihre eigenen filter-Funktion, so etwas wie dieses.
http://jsfiddle.net/wuqu2/
undefine
$scope.search.age
so, dass es läuft wie das erste laden?delete
! Ich stellte eine Antwort der Implementierung dieser Lösung.