2013-08-08 4 views
23

Ich wollte den Unterschied zwischen den .config und .run Funktionen in AngularJS herausfinden. Ich benutzte meine .config für die Einrichtung von Routen, aber ich hatte einige $on 's für die Beobachtung der Route Change Start und Erfolgsereignisse..config, .run, AppCtrl - wohin mit Routen?

Ich habe dann etwas von diesem Code nach .run verschoben, da ich einige Abhängigkeits-Injektionsprobleme in .config hatte.

Ich habe schließlich einige davon auf eine CommonAppController verschoben, die ich auf meine <body> gesetzt habe.

Ich hatte auch 2 .config 's und es schien in Ordnung zu laufen, aber das ist sicher nicht richtig?

Kann jemand einen kleinen Einblick geben, welche Methode zu verwenden?

+0

Können Sie bitte teilen, wie Sie in gemeinsamen Controller verwaltet? Ich habe versucht, Root-Controller zu verwenden und zur Anmeldeseite umzuleiten, wenn der Benutzer nicht authentifiziert ist. Das Problem bestand darin, dass der untergeordnete Controller immer noch aufgerufen wurde. Jede Hilfe wird sehr geschätzt. – user3151766

Antwort

69

Konfigurationsblöcke und Ausführungsblöcke werden zu verschiedenen Zeitpunkten im Anwendungs-Bootstrap ausgeführt und verfügen über verschiedene Injektionslokale. Hier finden Sie eine Zusammenfassung dessen, was Sie in der AngularJS documentation finden können.

Konfigurationsblöcke (registriert mit module.config()) werden während der Providerregistrierung ausgeführt und können nur Provider und Konstanten injiziert werden (siehe module.provider() und module.constant()). Dies ist normalerweise der Fall, in dem Sie anwendungsübergreifende Komponenten wie die $routeProvider konfigurieren würden. Dinge, die konfiguriert werden müssen, bevor die Dienste erstellt werden.

Run-Blöcke (registriert mit module.run()) werden ausgeführt, nachdem der Injektor alle Anbieter hat. Jetzt können alle Instanzen und Konstanten injiziert werden. Dies ist normalerweise, wo Sie Dienste konfigurieren würden, $rootScope, Ereignisse und so weiter.

Sie können mehrere von beiden haben, und sie werden in der Reihenfolge ausgeführt, in der sie für das Modul registriert waren. Manche Leute bevorzugen es, vor jeder Gruppe von Controllern einen Konfigurationsblock zu registrieren, um beispielsweise die Routen zu diesem Controller zu registrieren.

+0

Danke Steve, tolle Erklärung! Also in Bezug auf Ereignisse zu beobachten - globale Ereignisse, wie changelocationstart etc .... Run klingt wie ein großartiger Ort, aber ich könnte dies tatsächlich in einem App Controller - jeder Grund, einen über den anderen zu verwenden? Vielen Dank – Martin

-1

Der Block .config wird während der Registrierung und Konfiguration des Providers ausgeführt. Es ist ein Modulebene-Block.

Der Block .run wird nach dem Konfigurationsblock ausgeführt. Es wird verwendet, um Dienste und Konstanten zu injizieren.