2016-10-12 1 views
1

sagt, dass ich ein Dropdown habe sich auf ein Modell Eigenschaft gebunden ist, die das Modell überprüft werden, um zu bestimmen, die zu meiner Textbox gebunden werden.Conditional Modell in AngularJS Bindung basierend aus der Drop-down-Auswahl

<select ng-model="searchType"> 
    <option value="Id">Id</option> 
    <option value="Firstname">Firstname</option> 
</select> 

, was der Benutzer ausgewählt, wird die Suche ab, dass basieren und es könnte entweder searchQuery.id oder searchQuery.Firstname

Es wird angezeigt, wie dies:

<tr ng-repeat="user in users | orderBy:sortColumn:sortDescending | filter:searchQuery"> 
     <td>{{ user.Id }}</td> 
     <td>{{ user.Firstname }}</td> 
     <td>{{ user.LastName }}</td> 
</tr> 

Ich habe versucht, den Code zu verwenden, von einem ähnlichen Thema, das die getter/setter verwendet, aber ich kann nicht scheinen, damit es funktioniert.

Wie mache ich das?

Antwort

3

Sie können search Objekt in Controller wie $scope.search = {} sein und dann Suchobjekt über diesen Filter platzieren.

<select ng-model="searchType"> 
    <option value="Id">Id</option> 
    <option value="Firstname">Firstname</option> 
</select> 
<input class="form-control" ng-model="search[searchType]" ng-disabled="!searchType.length"/> 

<tr ng-repeat="user in users | orderBy:sortColumn:sortDescending | filter: search"> 
    <td>{{ user.Id }}</td> 
    <td>{{ user.Firstname }}</td> 
    <td>{{ user.LastName }}</td> 
</tr> 

Obwohl oben arbeiten, aber wenn Sie Dropdown ändern wird nun wie vorgesehen. Löschen Sie also das Objekt search, wenn Sie den Dropdown-Wert ändern. Diese Suche wäre also genauer.

Demo Plunkr

+2

ein gemachter Plunker auf dieser Basis Gute Antwort für Testzwecke: https://embed.plnkr.co/MDlUpFFRKxQRg7rCO61v/ –

+1

Oh wow! Ich wusste nichts davon! Es funktioniert auch teilweise! – Zach

+0

@NathanBeck danke für die Plunkr, es gab kleine Fehler in meinem Code, wenn Sie DropDown 'Suche' Objekt ändern Eigenschaft beibehalten. Also ich clear als bei Drop-Down-Wechsel. –

2

wenn ich mich nicht irre, können Sie dies tun:

ng-repeat="user in users | .... | filter:conditionalSearch()" 

und dann in Ihrem Controller/Link hinzufügen dies:

$scope.conditionalSearch = function() { 
    if ($scope.searchType == 'id') return { .. condition 1 .. } 
    if ($scope.searchType == 'firstName') return { .. condition 2 .. } 
} 
+0

Schließen! Die Funktion 'conditionalSearch' ist eine Funktion, die eine Funktion mit dem aktuellen Benutzer zurückgibt! '$ scope.conditionalSearch = function() {Rückgabefunktion (currentUser) {return currentUser [$ scope.SearchType] == $ scope.criteria; }}; 'Stellen Sie jedoch sicher, dass der searchType den Benutzereigenschaftsnamen entspricht - einschließlich case. – Zach

+0

@Zach bitte keine drastischen Änderungen am Code anderer Antworten vornehmen. Schreiben Sie stattdessen Ihre eigene Antwort, wenn Sie denken, dass sie anderen und dem Thread als Ganzes von Nutzen sein könnte. –

+0

@EmileBergeron Verzeihen Sie mir. Ich fühlte, dass seine Antwort nahe genug war, um die Veränderung und den Kredit zu rechtfertigen, anstatt meine eigenen zu veröffentlichen. – Zach