¿Cómo puedo probar un servicio AngularJS desde la consola?

Tengo un servicio como:

angular.module('app').factory('ExampleService', function(){ this.f1 = function(world){ return 'Hello '+world; } return this; }) 

Me gustaría probarlo desde la consola de JavaScript y llamar a la función f1() del servicio.

¿Cómo puedo hacer eso?

    TLDR: en una línea, el comando que está buscando:

     angular.element(document.body).injector().get('serviceName') 

    Bucear profundo

    AngularJS utiliza Dependency Injection (DI) para inyectar servicios / fábricas en sus componentes, directivas y otros servicios. Entonces, lo que debe hacer para obtener un servicio es primero obtener el inyector de AngularJS (el inyector es responsable de cablear todas las dependencias y proporcionarlas a los componentes).

    Para obtener el inyector de su aplicación, debe agarrarlo de un elemento que se maneja angular. Por ejemplo, si su aplicación está registrada en el elemento body, llame a injector = angular.element(document.body).injector()

    Desde el injector recuperado, puede obtener el servicio que desee con injector.get('ServiceName')

    Más información al respecto en esta respuesta: No se puede recuperar el inyector desde angular
    Y aún más aquí: llame a AngularJS desde el código heredado


    Otro truco útil para obtener el $scope de un elemento en particular. Seleccione el elemento con la herramienta de inspección DOM de sus herramientas de desarrollador y luego ejecute la siguiente línea ( $0 es siempre el elemento seleccionado):
    angular.element($0).scope()

    En primer lugar, una versión modificada de su servicio.

    un )

     var app = angular.module('app',[]); app.factory('ExampleService',function(){ return { f1 : function(world){ return 'Hello' + world; } }; }); 

    Esto devuelve un objeto, nada nuevo aquí.

    Ahora la forma de obtener esto de la consola es

    b)

     var $inj = angular.injector(['app']); var serv = $inj.get('ExampleService'); serv.f1("World"); 

    c)

    Una de las cosas que hacía antes era suponer que la aplicación .factory le devuelve la función en sí o una versión nueva de la misma. Que no es el caso. Para obtener un constructor, deberías hacer

     app.factory('ExampleService',function(){ return function(){ this.f1 = function(world){ return 'Hello' + world; } }; }); 

    Esto devuelve un constructor ExampleService que luego tendrá que hacer una ‘nueva’.

    O alternativamente,

     app.service('ExampleService',function(){ this.f1 = function(world){ return 'Hello' + world; }; }); 

    Esto devuelve un nuevo ExampleService () en la inyección.

    La respuesta de @GodGascha es acertada, pero eso es mucho para escribir cuando quiero acceder, así que lo agregué al final de mi app.js. Entonces, todo lo que tengo que escribir es x = getSrv('$http') para obtener el servicio http.

     // @if DEBUG function getSrv(name, element) { element = element || '*[ng-app]'; return angular.element(element).injector().get(name); } // @endif 

    Lo agrega al ámbito global, pero solo en el modo de depuración. Lo puse dentro de @if DEBUG para que no termine con él en el código de producción. Utilizo este método para eliminar el código de depuración de compuertas de producción.

    El framework Angularjs Dependency Injection es responsable de inyectar las dependencias de su módulo de aplicación a sus controladores. Esto es posible a través de su inyector.

    Primero debe identificar la aplicación ng y obtener el inyector asociado. La siguiente consulta funciona para encontrar su ng-app en el DOM y recuperar el inyector.

     angular.element('*[ng-app]').injector() 

    Sin embargo, en Chrome, puede apuntar al objective ng-app como se muestra a continuación. y usa el hack de $0 y publica el elemento angular.element($0).injector()

    Una vez que tenga el inyector, obtenga cualquier servicio inyectado de dependencia como se muestra a continuación

     injector = angular.element($0).injector(); injector.get('$mdToast'); 

    enter image description here