$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.