2016-06-07 20 views
0

Wie würden Sie eine verfeinerte Suche erstellen? Mit dem folgenden Code wirkt der Filter auf beide Spalten. Wenn Sie beispielsweise John eingeben, erhalten Sie beide John Smith & Smith John. Ich möchte ein Dropdown-Filter als Filter verwenden. Ich schaute auf andere Beiträge, die filter: object.value oder so etwas erwähnt.AngularJs Suche mit Dropdown-Filter

Ich denke, ich muss das Dropdown auf einen Wert festlegen, der dann in das Textfeld eingegeben und in die Tabelle gefiltert wird.

HTML

<div ng-app="searchApp" ng-controller="searchCtrl"> 
    <br> 
    <br> 
    <input type="text" ng-model="searchData"> 

    <table> 
     <thead> 
      <tr> 
       <th>First Name</th> 
       <th>Last Name</th> 
      </tr> 
     </thead> 
     <tbody> 


      <select> 
       <option value="">FilterBy</option> 
       <option value="">FirstName</option> 
       <option value="">LastName</option> 
      </select> 



      <tr ng-repeat="name in names | filter:searchData"> 

       <td>{{name.firstName}}</td> 
       <td>{{name.lastName}}</td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

<script src=" search.js " type="text/javascript "></script> 

.JS

var searchApp = angular.module('searchApp', []); 
searchApp.controller('searchCtrl', function($scope) { 

$scope.names = [ 
     {"firstName":"John","lastName":"Smith"}, 
     {"firstName":"Smith","lastName":"John"}, 
     {"firstName":"John","lastName":"Doe"}, 
     {"firstName":"Doe","lastName":"Jane"} 
     ]; 



}); 
+0

Ähnlich wie diese, aber ich möchte ng-Modell in der Lage sein können, ändern = „search.color zu“ search. (VorName oder nachName) "abhängig von der Dropdownliste. http://stackoverflow.com/questions/14733136/ng-repeat-filter-by-single-field – cbean14

Antwort

2

I hinzugefügt, um das Filter eine ng Änderungs Dropdown und an diesem Funktionsaufruf das Filterobjekt gesetzt.

<select ng-model="by" ng-change="filter(by)"> 
<option value="">FilterBy</option> 
<option value="firstName">FirstName</option> 
<option value="lastName">LastName</option> 
</select> 


$scope.filter = function(by){ 
    if(by){ 
    $scope.filterData = { }; 
    $scope.filterData[by] = $scope.searchData; 
    }else{ 
    $scope.filterData = {}; 
    } 
}; 

Hier ist ein Link zu einem Arbeitsbeispiel http://codepen.io/mkl/pen/GqpxGZ

+0

Genau das, was ich sehen musste. Danke! Ich vermute, dass es eine einfache wäre Möglichkeit, den Filter zu ändern, um beide Spalten zu durchsuchen So könnten Sie alle suchen, zuerst nach suchen und danach suchen – cbean14

+0

Sie könnten eine neue Option für Both hinzufügen oder, wenn keine ausgewählt ist, setzen Sie einfach $ scope.filterData = $ scope.searchData Ich habe mein Beispiel aktualisiert, um zu zeigen, wie t o Fügen Sie die Option hinzu. – Michael

+0

Michael - Mit ng-change scheint der Filter nicht mehr sofort oder dynamisch zu sein. Sie müssen das Textfeld eingeben und dann den Dropdown-Wert ändern, bevor die Ergebnisse zurückgegeben werden. Gibt es eine Möglichkeit, dies mit ng-change zu machen? – cbean14