Documentação do AngularJS app.run ()?

337

Como e onde é app.run()usado? Após a definição do módulo, depois app.config()ou depois app.controller()?

Estou adotando o BreezeJS Angular Q , que pergunta se determinado código pode ser executado na app.run()função.

user3071284
fonte
2
e após quaisquer .constants módulo angulares () ter sido definido
alfonsob

Respostas:

650

Aqui está a ordem de chamada:

  1. app.config()
  2. app.run()
  3. funções de compilação da diretiva (se forem encontradas no dom)
  4. app.controller()
  5. funções de link da diretiva (novamente, se encontrado)

Aqui está uma demonstração simples, onde você pode assistir a execução de cada um (e experimentar, se desejar).

Dos documentos do módulo Angular :

Executar blocos - é executado depois que o injetor é criado e é usado para iniciar o aplicativo. Somente instâncias e constantes podem ser injetadas em blocos de execução. Isso evita a configuração adicional do sistema durante o tempo de execução do aplicativo.

Os blocos de execução são a coisa mais próxima em Angular ao método principal. Um bloco de execução é o código que precisa ser executado para iniciar o aplicativo. É executado após todos os serviços terem sido configurados e o injetor ter sido criado. Os blocos de execução geralmente contêm código que é difícil de testar por unidade e, por esse motivo, deve ser declarado em módulos isolados, para que possam ser ignorados nos testes de unidade.

Uma situação em que os blocos de execução são usados ​​é durante as autenticações .

KayakDave
fonte
4
@KayakDave Não sei se isso está fora do tópico, mas em relação à ordem de execução mencionada acima, quando os Serviços serão iniciados e quando serão executados?
Jonnie
3
Provavelmente é um pouco tarde para ajudá-lo @jonnieM, mas os serviços serão executados dependendo de quando forem necessários primeiro - ou seja, se você precisar primeiro de um serviço em um bloco de execução, ele será executado imediatamente antes desse bloco. Quanto aos provedores, irritantemente, eles serão executados antes ou depois dos blocos de configuração - dependendo de qual ordem eles vêm no código. Considerando que a única vez em que você usa diretamente um provedor está no estágio de configuração, isso não parece correto.
Zac Seth
2
oi, eu tenho bifurcada e modificado sua amostra violino para mostrar também a carga de fábrica: jsfiddle.net/lorezz/4cxgpLqj/1
Lorezz
11
Impressionante. Para ser completa, as funções app.constant () são chamadas antes de tudo ... E as funções app.factory () e outras funções de serviço são chamadas "preguiçosamente". Em outras palavras, o Angular usa as funções fornecidas para criar uma instância de serviço somente quando um controlador ou outro serviço precisa ser injetado, mesmo que isso seja muito tempo depois que o aplicativo foi inicializado.
Niko Bellic
Em um projeto Ionic, por padrão, a execução é chamada antes da configuração. Por que é que ?
Rayjax 20/09/2015
28

Especificamente...

Como e onde é app.run()usado? Após a definição do módulo ou depois app.config(), depois app.controller()?

Onde:

No seu package.js Por exemplo /packages/dashboard/public/controllers/dashboard.js

Quão:

Faça com que fique assim

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
fonte