Lazy-Laden von externem JavaScript in einem AngularJS-Controller

8

Einige meiner Routen benötigen Funktionalität von externem JS. Ich möchte sie nicht alle auf einmal laden, da diese JS nur in bestimmten Routen benötigt werden (zB /upload benötigt ein JS für das Hochladen von Fotos, /photos benötigt ein anderes JS für Lightbox, /funny benötigt JS für Animationsmaterial, etc).

Was ist die beste Vorgehensweise, um diese externen JavaScripts lazy zu laden?

Auf diese Routen kann mehrmals zugegriffen werden (z. B. kann der Benutzer zu /upload , dann zu /photos und dann wieder zu /upload ) gehen

    
wiradikusuma 21.09.2012, 14:49
quelle

3 Antworten

2

Die einzige Möglichkeit, mit solchen Fällen umzugehen, ist die Methode "resolve" einer Route. Diese Methode kann verwendet werden, um eine Abhängigkeit zu definieren, die geladen werden soll, bevor der Controller der Route instanziiert wird. Eine der verschiedenen möglichen Rückgabetypen dieser Methode ist ein Versprechen. Somit können Sie damit beginnen, Ihren externen JavaScript-Code asynchron zu laden und ein Versprechen zurückzugeben, das aufgelöst wird, sobald Ihre externen Skripte geladen werden.

Die Dokumentation dazu finden Sie hier: Ссылка im Abschnitt "wann".

    
alex3683 22.10.2012, 06:58
quelle
3

Zusätzlich zu dem, was Alex gesagt hat: Wenn Sie AngularJS-Artefakte wie Controller und Direktiven laden, müssen Sie den entsprechenden Provider anstelle der Modul-API verwenden, um sie zu registrieren. Artefakte, die nach dem Bootstrapping der Anwendung über die Modul-API registriert wurden, stehen der Anwendung nicht zur Verfügung. Zum Beispiel würden Sie einen Lazy Controller wie folgt definieren ...

%Vor%

statt dessen ...

%Vor%

Ich habe einen Blog-Post geschrieben, in dem genau beschrieben wird, wie Alex die "resolve" -Methode benutzt, um lazy loading in AngularJS zu implementieren. Ссылка

    
ify.io 21.04.2013 16:23
quelle
2

@ alex3683's Antwort ist wahrscheinlich der korrekte AngularJS-Weg, aber ich verstehe das Konzept nicht, also benutze ich stattdessen jQuerys getScript() . Also, in CoffeeScript:

%Vor%

Und nenn es einfach von deinem Controller aus. Da die AngularJS-Dienste "Lazy" und "Singleton" sind, wird das Skript nur einmal geladen.

    
wiradikusuma 23.12.2012 09:18
quelle

Tags und Links