$injector
(service in module AUTO
)
$injector is used to retrieve object instances as defined by
provider, instantiate types, invoke methods,
and load modules.
The following always holds true:
var $injector = angular.injector();
expect($injector.get('$injector')).toBe($injector);
expect($injector.invoke(function($injector){
return $injector;
}).toBe($injector);
JavaScript does not have annotations, and annotations are needed for dependency injection. The following ways are all valid way of annotating function with injection arguments and are equivalent.
// inferred (only works if code not minified/obfuscated)
$inject.invoke(function(serviceA){});
// annotated
function explicit(serviceA) {};
explicit.$inject = ['serviceA'];
$inject.invoke(explicit);
// inline
$inject.invoke(['serviceA', function(serviceA){}]);
In JavaScript calling toString() on a function returns the function definition. The definition can then be
parsed and the function arguments can be extracted. NOTE: This does not work with minfication, and obfuscation
tools since these tools change the argument names.
$inject AnnotationBy adding a $inject property onto a function the injection parameters can be specified.
As an array of injection names, where the last item in the array is the function to call.
Return an instance of the service.
name – {string} –
The name of the instance to retrieve.
Create a new instance of JS type. The method takes a constructor function invokes the new operator and supplies all of the arguments to the constructor function as specified by the constructor annotation.
Type – {function} –
Annotated constructor function.
locals(optional) – {Object=} –
Optional object. If preset then any argument names are read from this object first, before
the $injector is consulted.
Invoke the method and supply the method arguments from the $injector.
fn – {!function} –
The function to invoke. The function arguments come form the function annotation.
self(optional) – {Object=} –
The this for the invoked method.
locals(optional) – {Object=} –
Optional object. If preset then any argument names are read from this object first, before
the $injector is consulted.