Документация по AngularJS app.run ()?

337

Как и где app.run()используется? После определения модуля, после app.config()или после app.controller()?

Я использую BreezeJS Angular Q , который спрашивает, можно ли запустить определенный код в app.run()функции.

user3071284
источник
2
и после любого углового модуля .constants () был установлен
alfonsob

Ответы:

650

Вот порядок звонков:

  1. app.config()
  2. app.run()
  3. функции компиляции директивы (если они найдены в dom)
  4. app.controller()
  5. функции ссылки директивы (опять же, если найдены)

Вот простая демонстрация, где вы можете наблюдать за выполнением каждого (и экспериментировать, если хотите).

Из документов модуля Angular :

Блоки выполнения - выполняются после создания инжектора и используются для запуска приложения. Только экземпляры и константы могут быть введены в блоки выполнения. Это необходимо для предотвращения дальнейшей настройки системы во время выполнения приложения.

Блоки прогона - самая близкая вещь в Angular к основному методу. Блок выполнения - это код, который необходимо запустить, чтобы запустить приложение. Это выполняется после того, как все службы были настроены и инжектор был создан. Блоки выполнения обычно содержат код, который трудно выполнить модульным тестированием, и по этой причине его следует объявлять в изолированных модулях, чтобы их можно было игнорировать в модульных тестах.

Одна из ситуаций, когда используются блоки выполнения, - во время аутентификации .

KayakDave
источник
4
@KayakDave Я не уверен, что это не по теме, но в отношении порядка выполнения, который вы упомянули выше, когда будут запущены службы и когда они будут запущены?
Джонни
3
Возможно, уже немного поздно, чтобы помочь вам @jonnieM, но службы будут выполняться в зависимости от того, когда они нужны в первую очередь - то есть, если вам сначала понадобится служба в блоке выполнения, она будет выполняться непосредственно перед этим блоком. Что касается провайдеров, то, к сожалению, они будут работать либо до, либо после блоков конфигурации - в зависимости от того, в каком порядке они приходят в коде. Учитывая, что единственный раз, когда вы напрямую используете провайдера, находится на этапе настройки, это не кажется правильным.
Зак Сет
2
Привет, я раздвоил и изменил твой образец скрипки, чтобы показать также заводскую загрузку: jsfiddle.net/lorezz/4cxgpLqj/1
Lorezz
1
Потрясающие. Если быть точным, функции app.constant () вызываются раньше всего ... А app.factory () и другие сервисные функции вызываются "лениво". Другими словами, Angular использует предоставленные функции для создания экземпляра службы только тогда, когда это требуется контроллеру или другой службе, даже если это происходит долго после инициализации приложения.
Нико Беллик
В проекте Ionic запуск по умолчанию вызывается перед настройкой. Это почему ?
Rayjax
28

В частности ...

Как и где app.run()используется? После определения модуля или после app.config(), после app.controller()?

Куда:

В вашем package.js Например /packages/dashboard/public/controllers/dashboard.js

Как:

Сделайте так, чтобы это выглядело так

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'
});
Майкл Коул
источник