So laden Sie JSON-Daten vorab, damit sie verfügbar sind, wenn das Angularjs-Modul bereit ist

9

Ich habe eine sehr einfache App, die ein JSON-Array mit $ http.get innerhalb eines Controllers lädt. Er weist die Ergebnisdaten dem Bereich zu und der HTML-Code wird durch die Ergebnisse wiederholt, um eine Liste anzuzeigen. Es ist ein sehr einfaches angularjs Beispiel.

%Vor%

Beim Testen auf einem langsamen Server erkannte ich, dass es eine 3-Sekunden-Blockierungsverzögerung gab, während die Wiederholungsregion zerrissen wurde. Das Debugging hat mir gezeigt, dass mein Controller nicht versucht, die Daten zu bekommen, bis die Seite geladen ist. Meine Seite benötigt 3 Sekunden zum Laden. Dann muss ich noch 3 Sekunden warten, bis die JSON-Daten geladen sind.

Ich möchte die Daten so schnell wie möglich laden, damit sie fertig ist, wenn mein Controller bereit ist. Einfach ausgedrückt, möchte ich die Daten so vorladen, dass sie parallel zu meinem Modul geladen werden.

Ich habe überall gesucht und das nächste, was ich gefunden habe, war "Entschlossenheit", aber ich benutze keine Routen. Dies ist eine sehr einfache Liste und keine Routen oder Vorlagen.

Wie kann ich JSON laden, sobald die Seite gerendert wird, so dass sie bereit ist, wenn der Controller bereit ist und keine Blockierung auftritt ... und diese Daten in den Gültigkeitsbereich bringen?

    
user2341148 20.12.2013, 07:51
quelle

3 Antworten

3

Sie können die Methode module.run verwenden. Dies wird ausgeführt, nachdem die Konfigurationsstufe abgeschlossen ist. Um dies zu verwenden, müssen Sie eine Service Factory erstellen, die die eigentliche Abfrage durchführt und das Ergebnis zwischenspeichert.

%Vor%

In Ihrem Controller verwenden Sie immer noch die Fabrik, um die Daten mit einem Versprechen zu erhalten, dann Wrapper.

%Vor%

Auf diese Weise können Sie den asynchronen Aufruf noch vor dem Ausführen von Controller-Code durchführen.

    
Chandermani 20.12.2013 08:15
quelle
0

Es klingt wie Ihre Latenz kommt von einem langsamen Netzwerk + Server, und nicht eine große Menge an Daten.

Sie könnten also ein Tag in Ihre Seite rendern, sodass die Daten zusammen mit der HTML-Antwort der Seite gesendet werden. Der Nachteil ist, dass Sie Ihre Daten hart in Ihre Seite kodieren. Dieses Tag würde den $ http-Cache grundsätzlich mit Ihren Daten vorbelegen.

%Vor%

Verwenden Sie dann entweder die Eigenschaft $ http cache oder wickeln Sie $ http in einen benutzerdefinierten Service ein, der den Cache überprüft.

Natürlich liegt der Grund des Problems darin, dass Ihr Server 3 Sekunden pro Anfrage benötigt, wenn Sie normalerweise mindestens im Sub-Sekunden-Bereich haben wollen.

    
Alex Buchanan 20.12.2013 08:13
quelle
0

Sie können Daten laden, indem Sie Code (etwas wie Chandermanis listService) in eine separate Datei schreiben, aber ohne angular. Sie können jquery ajax verwenden, um Ihre Daten zu laden.

Schreiben Sie dann einen Service in angular, um diese Daten zu lesen und an Ihren Controller zu übergeben.

    
Alborz 20.12.2013 20:22
quelle

Tags und Links