2016-07-14 3 views
0

Ich benutze Angularjs mit dem dirPagination-Plugin, um mit einer Web-API zu verbinden. Dies scheint gut zu funktionieren. Ich fügte hinzu, eine Suchfunktion eine serverseitige Suche zu tun: merken Suchabfrage in Funktion zu verwenden

 $scope.searchChanged = function() { 

      if ($scope.searchFor.length == 0) { 
       $scope.calculatedValue = 'e'; 
      } else { 
       vm.getData(vm.pageno, vm.getSearch($scope.searchFor)); 
      } 
     } 

     vm.getSearch = function (query) { 

      if (query == undefined) { 
       query = 'tech'; 
      } else { 
       query = query; 
      } 
      return query; 
     } 

Siehe Plnkr für den vollständigen Code Wenn ich (zB Umsatz) die API gibt Ergebnisse starten Sie die Suche und die Paging korrekt ist, die GET-Anforderung ist:

/api/students/?category=sales&begin=1&pageSize=10 

Aber wenn Sie auf eine andere Seite Nummer gehen wollen, an den Server die Erhaltungs-Anforderung ist:

/api/students/?category=tech&begin=2&pageSize=10 

Wie kann der Blick erinnern die Abfrage 'Umsatz', so dass die Auslagerung und Ergebnisse korrekt sind?

Antwort

1

Du hier einen gemeinsamen Fehler zu machen: Sie brauchen nicht aus der Sicht in Variable übergeben, wenn Sie bereits einen Umfang Variable.

zu dieser Änderung wäre viel weniger fehleranfällig

 // change this to var getSearch or function getSearch if you don't need it on the view anymore 
     vm.getSearch = function() { 
      var query = vm.searchFor; 
      // you should only use vm, change ng-model to data.searchFor 

      if (query == undefined) { 
       query = 'tech'; 
      } 

      return query; 
     } 


     vm.getData = function() { 
      vm.users = []; 

      $http.get("/api/students/?category=" + vm.getSearch() + "&begin=" + vm.pageno + "&pageSize=" + vm.itemsPerPage).success(function (response) { 
       vm.users = response.data; 
       vm.total_count = response.total_count; 
      }); 
     }; 
0

Ihre Anfrage ID gut, müssen Sie die SQL-Abfrage zu optimieren, damit Sie die richtigen Ergebnisse erhalten können. es sollte wie folgt aussehen:

@begin INT = 0, 
@pageSize INT = 10 
SELECT * 
FROM [TableName] 
ORDER BY id 
OFFSET (@pageSize * @begin) 
ROWS FETCH NEXT @pageSize ROWS ONLY; 
+0

Die Abfrage in Ordnung ist. Das Problem liegt in der $ scope.searchChanged-Funktion. –