Laden Sie große Datenmengen mit AngularJS

Ich versuche, mich zu entwickeln, einen Weg zum laden von großen Datenmengen (bis 1000 Zeilen) in eine Seite, ohne Paginierung. Die erste Hürde dabei war, die Abfrage der DB parallel mundgerechte Stücke, die ich getan habe, mit Hilfe der Lösung bei Wie stellen Sie nacheinander Rest webservices-Aufrufe mit AngularJS?

Hab ich, läuft in zwei Probleme mit dem, was ich habe, umgesetzt, jedoch:

  1. Jede zurückgegebene Objekt übergeben wird, in ein array, welches dann selbst zurückgegeben als array, das Eckige verwendet, um zu binden. d.h. [[{key:value, key:value, key:value}, {key:value, key:value, key:value}], [{key:value, key:value, key:value}, {key:value, key:value, key:value}]] Als solcher kann ich nicht verwenden, ng-repeat="item in Daten", weil die Daten ist ein array von arrays. Doing " - Element in data[0]" macht Element verfügbar. Verkettung zu sein scheint, die Antwort aber ich habe nicht in der Lage heraus zu Sortieren, damit es funktioniert.

  2. Mache ich mehrere Anfragen an die Datenbank und jede Anfrage wird korrekt zurückgegeben, aber die Seite nicht wiedergegeben, bis alle Anforderungen abgeschlossen haben -- was völlig negiert den Punkt zu tun, mehrere Anfragen in den ersten Platz.

Also, auf der Suche über mein code, wie kann ich wieder schreiben Sie, eine Lösung für diese beiden Probleme? Also, die Daten, die zurückgegeben wird, wie ein array, und dass Daten gerendert werden jedes mal, wenn eine Abfrage abgeschlossen ist?

app.factory('ScanService', function($http, $q) {
  function fetchOne(stepCount) {
    return $http({
      method: 'GET',
      url: '/index.php/scans',
      params: {step:stepCount}
    })
    .then(function onSuccess(response) {
      return response.data;
    }
    return {
      fetchAll: function(steps) {
        var scans = [];
        for (var i = 1; i <= steps; i++) {
          scans.push(fetchOne(i));
        }
        return $q.all(scans);
      }
    };
});

app.controller.ScanCtrl = function($scope, $q, ScanService) {
  $scope.scans = ScanService.fetchAll(10);
};

Follow-up

Sollte ich hinzufügen, dass ich Tat, zu verwalten, um diese Arbeit basiert auf der Lösung unten und eine eckige.forEach(). Kann nicht vorschlagen, wer mit "big data", die diesen Weg gehen. Auf etwa 1000 Zeilen, der browser war überwältigt und begann zu verlangsamen erheblich. Versucht, filter mit Winkelgetriebe.filter erlebten auch eine erhebliche Verzögerung, bis die Ergebnisse waren verengt. Auf der anderen Seite, ein paar hundert Zeilen arbeitete anständig gut und erlaubt nativen filtern - das war ein wichtiges Ziel für meine Umsetzung.

  • Wer mit gesundem Verstand möchte anstarren tausend Zeilen von Daten?
  • Leider musste ich es auch tun. Einige Analysten sind komfortables arbeiten mit 1000 von Zeilen von Excel-Daten und möchten eine ähnliche Ansicht auf das web. Während ich von ganzem Herzen nicht einverstanden mit Ihnen, manchmal, Sie haben zu tun, was der Kunde will 🙁
  • wer will auf über 100 Seiten 10 Zeilen pro? Ich vermute, das ist mir wirklich nach alternativen Lösungen zu suchen, um die paging-Paradigma und das unendliche scrollen nicht das problem löst, ich bin der Begegnung. Die Allgemeine Absicht ist, dass Sie laden Sie Ihre Daten und dann zu filtern, innerhalb der Winkel so, dass du nicht unbedingt suchen, bei 1000 Zeilen-aber Sie könnten, wenn Sie waren verrückt.
InformationsquelleAutor iamsar | 2013-07-05
Schreibe einen Kommentar