¿AngularJS app.run () documentación?


337

¿Cómo y dónde se app.run()usa? Después de la definición del módulo, ¿después app.config()o después app.controller()?

Estoy adoptando el BreezeJS Angular Q , que pregunta si se puede ejecutar cierto código en la app.run()función.


2
y después de que se haya configurado cualquier módulo angular .constants ()
alfonsob

Respuestas:


650

Aquí está el orden de llamada:

  1. app.config()
  2. app.run()
  3. funciones de compilación de la directiva (si se encuentran en el dom)
  4. app.controller()
  5. funciones de enlace de la directiva (de nuevo, si se encuentra)

Aquí hay una demostración simple en la que puede ver cada uno ejecutándose (y experimentar si lo desea).

De los documentos del módulo de Angular :

Ejecutar bloques : se ejecutan después de crear el inyector y se utilizan para iniciar la aplicación. Solo se pueden inyectar instancias y constantes en bloques de ejecución. Esto es para evitar una mayor configuración del sistema durante el tiempo de ejecución de la aplicación.

Los bloques de ejecución son lo más parecido en Angular al método principal. Un bloque de ejecución es el código que debe ejecutarse para iniciar la aplicación. Se ejecuta después de que se hayan configurado todos los servicios y se haya creado el inyector. Los bloques de ejecución generalmente contienen código que es difícil de probar por unidad, y por esta razón debe declararse en módulos aislados, de modo que puedan ignorarse en las pruebas unitarias.

Una situación en la que se utilizan bloques de ejecución es durante las autenticaciones .


44
@KayakDave No estoy seguro de si esto está fuera de tema, pero en relación con el orden de ejecución que mencionó anteriormente, ¿cuándo se iniciarían los Servicios y cuándo se ejecutarían?
jonnie

3
Probablemente sea un poco tarde para ayudarlo @jonnieM, pero los servicios se ejecutarán dependiendo de cuándo se necesiten primero, es decir, si primero necesita un servicio en un bloque de ejecución, se ejecutará inmediatamente antes de ese bloque. En cuanto a los proveedores, de manera molesta, se ejecutarán antes o después de los bloques de configuración, según el orden en que se encuentren en el código. Teniendo en cuenta que la única vez que usa directamente un proveedor es en la etapa de configuración, esto no parece correcto.
Zac Seth

2
hola, he bifurcado y modificado su muestra de violín para mostrar también la carga de fábrica: jsfiddle.net/lorezz/4cxgpLqj/1
Lorezz

1
Increíble. Para ser exhaustivo, las funciones app.constant () se invocan antes que todo ... Y app.factory () y otras funciones de servicio se invocan "perezosamente". En otras palabras, Angular usa las funciones proporcionadas para crear una instancia de servicio solo cuando un controlador u otro servicio lo necesita inyectado, incluso si eso es mucho después de que la aplicación se haya inicializado.
Niko Bellic

En un proyecto Ionic, por defecto se ejecuta run antes de config. Porqué es eso ?
Rayjax

28

Específicamente...

¿Cómo y dónde se app.run()usa? ¿Después de la definición del módulo o después app.config(), después app.controller()?

Dónde:

En su package.js Eg /packages/dashboard/public/controllers/dashboard.js

Cómo:

Haz que se vea así

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'
});
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.