2016-11-19 5 views
3

ich ein Suchfeld mit einem ng-Modell zugeordnet werden:ausblenden nicht passende Elemente aus dem Array in Angular

<input type="text" class="form-control" placeholder="Search" ng-model="searchLibrary.text"> 

Und eine ng-repeat mit einem Filter searchLibrary.text

<div ng-repeat="w in items | filter:searchLibrary.text" on-item-removed="onItemRemoved(item)"> 

So, Wenn der Benutzer etwas eingibt, entfernt der Filter alle nicht übereinstimmenden Elemente aus dem Array, aber gibt es eine Möglichkeit, nicht übereinstimmende Elemente auszublenden, anstatt sie zu entfernen?

Der Grund, warum das Entfernen von Elementen problematisch ist, ist eine Rückrufmethode, die dem ng-repeat zugeordnet ist, die aufgerufen wird, wenn ein Element entfernt wird, aber ausgelöst wird, wenn ein Benutzer nach einem Element sucht, das nicht das richtige Verhalten ist.

bearbeiten: Alle Elemente im items Array sind ziehbar, so kann der Benutzer manuell ziehen und Elemente aus Feld A auf Feld B fallen Der Rückruf wird ausgelöst, wenn ein Element entfernt wird, aber es sollte nicht bekommen ausgelöst, wenn der Benutzer nach einer Artikelbeschreibung sucht.

Jede Hilfe wird sehr geschätzt.

+0

kann ich wissen, wie Callbacks ausgelöst werden, wenn Element aus der gefilterten Sammlung entfernt wird. –

+0

Mögliches Duplikat von [Angularjs filter negated] (http://stackoverflow.com/questions/13278371/angularjs-filter-negated) – Sreekanth

Antwort

1

Sie können Elemente ng-if oder ng-show ausblenden. Sie könnten

<div ng-repeat="w in items | filter:searchLibrary.text" on-item-removed="onItemRemoved(item)"> 

mit

<div ng-repeat="w in items" ng-if="w === searchLibrary.text" on-item-removed="onItemRemoved(item)"> 

ersetzen Hier ist ein Link zu einem Beispiel auf CodePen https://codepen.io/anon/pen/VmPzMz

+0

Funktioniert nicht. Dies blendet alle Elemente im Voraus aus. Sollte in der Lage sein, nicht passende Elemente zu verbergen, nachdem der Suchbegriff eingegeben wurde – Pavan

+0

Versuchen Sie, ng-if zu ersetzen mit: 'ng-if =" searchLibrary.text === '' || w === searchLibrary.text "' – fnx

0

Sie könnten auch eine ng-Klasse verwenden.

.is-hidden { 
    display: none; 
} 

<div ng-repeat="w in items" ng-class="{'is-hidden': w===searchLibrary.text}" 
    on item-removed="onItemRemoved(item)"> 
Verwandte Themen