Dokumentacja AngularJS app.run ()?

337

Jak i gdzie jest app.run()używany? Po definicji modułu, po app.config()czy po app.controller()?

Przyjmuję BreezeJS Angular Q , który pyta, czy określony kod można uruchomić w app.run()funkcji.

użytkownik3071284
źródło
2
i po ustawieniu dowolnego modułu kątowego .constants ()
alfonsob

Odpowiedzi:

650

Oto kolejność wywoływania:

  1. app.config()
  2. app.run()
  3. funkcje kompilacji dyrektywy (jeśli są znalezione w dom)
  4. app.controller()
  5. funkcje łącza dyrektywy (ponownie, jeśli znaleziono)

Oto proste demo, w którym możesz obejrzeć każde z nich (i eksperymentować, jeśli chcesz).

Z dokumentów modułu Angulara :

Uruchamianie bloków - uruchamiane po utworzeniu wtryskiwacza i używane do uruchomienia aplikacji. Tylko instancje i stałe mogą być wstrzykiwane do bloków uruchomień. Zapobiega to dalszej konfiguracji systemu w czasie wykonywania aplikacji.

Uruchamianie bloków jest najbliższe w Angularowi głównej metody. Blok uruchamiania to kod, który musi zostać uruchomiony, aby uruchomić aplikację. Jest wykonywany po skonfigurowaniu wszystkich usług i utworzeniu wtryskiwacza. Bloki uruchamiania zwykle zawierają kod, który jest trudny do testowania jednostkowego, i dlatego należy zadeklarować go w izolowanych modułach, aby można je było zignorować w testach jednostkowych.

Jedną z sytuacji, w których używane są bloki uruchamiania, są podczas uwierzytelniania .

KayakDave
źródło
4
@KayakDave Nie jestem pewien, czy to nie jest temat, ale w związku z kolejnością uruchamiania, o której wspomniałeś powyżej, kiedy Usługi zostaną zainicjowane, a kiedy będą uruchamiane?
jonnie
3
Prawdopodobnie jest trochę za późno, aby ci pomóc @jonnieM, ale usługi będą wykonywane w zależności od tego, kiedy będą najpierw potrzebne - tj. Jeśli najpierw potrzebujesz usługi w bloku uruchomieniowym, zostanie ona wykonana bezpośrednio przed tym blokiem. Co do dostawców, irytujące będą one działać przed lub po blokach konfiguracyjnych - w zależności od tego, w jakiej kolejności znajdują się w kodzie. Biorąc pod uwagę, że jedyny czas, w którym bezpośrednio korzystasz z dostawcy, znajduje się na etapie konfiguracji, nie wydaje się to właściwe.
Zac Seth
2
cześć, rozwidliłem i zmodyfikowałem waszą próbkę skrzypiec, aby pokazać również obciążenie fabryczne: jsfiddle.net/lorezz/4cxgpLqj/1
Lorezz
1
Niesamowite. Mówiąc dokładniej, funkcje app.constant () są wywoływane przed wszystkim ... A app.factory () i inne funkcje serwisowe są wywoływane „leniwie”. Innymi słowy, Angular używa dostarczonych funkcji do utworzenia instancji usługi tylko wtedy, gdy kontroler lub inna usługa potrzebuje jej wstrzyknięcia, nawet jeśli długo po zainicjowaniu aplikacji.
Niko Bellic,
W projekcie Ionic domyślnie uruchamiany jest przed konfiguracją. Dlaczego ?
Rayjax,
28

Konkretnie...

Jak i gdzie jest app.run()używany? Po definicji modułu czy po app.config(), po app.controller()?

Gdzie:

W pakiecie.js np /packages/dashboard/public/controllers/dashboard.js

W jaki sposób:

Niech tak to wygląda

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'
});
Michael Cole
źródło