2013-10-30 2 views
6

Ich verwende ng-table.Wie filtere ich eine Zeile basierend auf beliebigen Spaltendaten mit einem einzigen Textfeld

Ich habe versucht, Filter in der example angegeben, aber zum Filtern jeder Spalte muss ich separate Textfeld haben.

Aber was ich zu erreichen bin, ist ein Textfeld, jede Zeile basierend auf beliebigen Spaltendaten zu suchen.

Wie kann ich das erreichen?

Genau wie jquery datatable Suchfeld.

+0

haben sie versucht, die Arbeit mit benutzerdefinierten Beispiel filtert? – charlietfl

+0

@charlietfl ya Ich habe versucht, benutzerdefinierte Filter auch Filterung basierend auf einer einzigen Spalte – Viswa

+1

Ich weiß nicht, dieses Tabellensystem ... aber schaue auf Beispiel 14 Externe Datensteuerung. Es sieht ziemlich einfach aus, eine Uhr für den Datensatz zu erstellen und sie selbst zu ändern. Bewahren Sie eine Kopie der Originaldaten auf und verwenden Sie sie zum Zurücksetzen, wenn der Benutzer mit der Filterung fertig ist – charlietfl

Antwort

10

Dies ist, wie ich

Html

<input type="text" ng-model="searchUser"> <table ng-table="tableParams"> <tr ng-repeat="user in $data"> ... </tr> </table> 

Script

 var usersData = []; // initial data 

     $scope.tableParams = new ngTableParams({ 
      page: 1,   
      count: 7 
     }, { 
     counts : [7,14,21,28],   
     getData: function($defer, params) { 
      var searchedData = searchData(); 
      params.total(searchedData.length); 
      $scope.users = searchedData.slice((params.page() - 1) * params.count(), params.page() * params.count()); 
      $defer.resolve($scope.users);       
     }, 
     $scope: { $data: {} } 
    }); 


$scope.$watch("searchUser", function() { 
    $scope.tableParams.reload(); 
}); 

var searchData = function(){ 
    if($scope.searchUser) 
     return $filter('filter')(usersData,$scope.searchUser); 
    return usersData; 
} 

Reststandard ngtable Konfiguration hat

.

+2

Sie könnten das erneute Laden der Tabelle beim ersten Laden verhindern, indem Sie das Reload innerhalb dieses 'this.last! == undefined' einbinden, ein vollständiges Beispiel:' $ scope. $ Watch ("searchUser", function() { \t \t if (! this.last == undefined) { \t \t \t $ scope.tableParams.reload(); \t \t} \t}); ' – Daniel

+0

@ Daniel ja .. danke – Viswa

1

Basierend auf der ursprünglichen Frage, wenn Sie alle Ihre Daten zunächst laden, dann ist es ziemlich einfach. Ich benutzte diese http://ng-table.com/#/filtering/demo-api als Referenz und fügte dann typeahead-Filterung mit ng-change hinzu.

Ausblick:

<form name="awesomeForm" novalidate> 
<div class="input-group"> 
    <input type="text" class="form-control" placeholder="Search term" name="searchTerm" ng-model="globalSearchTerm" ng-change="applyGlobalSearch(globalSearchTerm)" required /> 
    <span class="input-group-btn"> 
     <button class="btn btn-default" type="submit" > 
      <span class="glyphicon glyphicon-search"></span> 
     </button> 
    </span> 
</div> 
</form> 

In Ihrem Controller (nachdem Sie die Daten in der Tabelle laden):

$scope.applyGlobalSearch = function(term) { 
    $scope.tableParams.filter({ $: term }); 
} 
Verwandte Themen