AngularJS app.run () Dokumentation?


337

Wie und wo wird es app.run()eingesetzt? Nach der Moduldefinition, nach app.config()oder nach app.controller()?

Ich übernehme das BreezeJS Angular Q , das fragt, ob bestimmter Code in der app.run()Funktion ausgeführt werden kann.


2
und nachdem ein Winkelmodul .constants () gesetzt wurde
alfonsob

Antworten:


650

Hier ist die Anrufreihenfolge:

  1. app.config()
  2. app.run()
  3. Kompilierungsfunktionen der Direktive (wenn sie im dom gefunden werden)
  4. app.controller()
  5. Link-Funktionen der Direktive (erneut, falls gefunden)

Hier ist eine einfache Demo, in der Sie jede Ausführung beobachten können (und experimentieren können, wenn Sie möchten).

Aus Angulars Moduldokumenten :

Blöcke ausführen - werden ausgeführt, nachdem der Injektor erstellt wurde, und werden zum Kickstart der Anwendung verwendet. In Ausführungsblöcke können nur Instanzen und Konstanten eingefügt werden. Dies soll eine weitere Systemkonfiguration während der Laufzeit der Anwendung verhindern.

Laufblöcke sind in Angular der Hauptmethode am nächsten. Ein Ausführungsblock ist der Code, der ausgeführt werden muss, um die Anwendung zu starten. Es wird ausgeführt, nachdem alle Dienste konfiguriert und der Injektor erstellt wurden. Ausführungsblöcke enthalten normalerweise Code, der schwer zu testen ist. Aus diesem Grund sollten sie in isolierten Modulen deklariert werden, damit sie in den Komponententests ignoriert werden können.

Eine Situation, in der Laufblöcke verwendet werden, ist die Authentifizierung .


4
@KayakDave Ich bin mir nicht sicher, ob dies nicht zum Thema gehört, aber in Bezug auf die oben erwähnte Ausführungsreihenfolge, wann würden Dienste initiiert und wann würden sie ausgeführt?
Jonnie

3
Es ist wahrscheinlich etwas spät, Ihnen @jonnieM zu helfen, aber Dienste werden ausgeführt, je nachdem, wann sie zuerst benötigt werden. Wenn Sie also zum ersten Mal einen Dienst in einem Ausführungsblock benötigen, wird er unmittelbar vor diesem Block ausgeführt. Ärgerlicherweise werden Anbieter entweder vor oder nach Konfigurationsblöcken ausgeführt - je nachdem, in welcher Reihenfolge sie im Code enthalten sind. Wenn man bedenkt, dass Sie einen Anbieter nur in der Konfigurationsphase direkt verwenden, scheint dies nicht richtig zu sein.
Zac Seth

2
Hallo, ich habe Ihr Geigenbeispiel
anzuzeigen

1
Genial. Um genau zu sein, werden die Funktionen von app.constant () vor allem aufgerufen ... Und die Funktionen von app.factory () und anderen Diensten werden "träge" aufgerufen. Mit anderen Worten, Angular verwendet die bereitgestellten Funktionen, um eine Dienstinstanz nur dann zu erstellen, wenn ein Controller oder ein anderer Dienst die Injektion benötigt, auch wenn dies lange nach der Initialisierung der App geschieht.
Niko Bellic

In einem Ionic-Projekt wird standardmäßig run vor config aufgerufen. Warum ist das so ?
Rayjax

28

Speziell...

Wie und wo wird es app.run()eingesetzt? Nach der Moduldefinition oder nach app.config(), nach app.controller()?

Wo:

In Ihrem package.js zB /packages/dashboard/public/controllers/dashboard.js

Wie:

Lass es so aussehen

var app = angular.module('mean.dashboard', ['ui.bootstrap']);

app.controller('DashboardController', ['$scope', 'Global', 'Dashboard',
    function($scope, Global, Dashboard) {
        $scope.global = Global;
        $scope.package = {
            name: 'dashboard'
        };
        // ...
    }
]);

app.run(function(editableOptions) {
    editableOptions.theme = 'bs3'; // bootstrap3 theme. Can be also 'bs2', 'default'
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.