On this page
inject
function
Injects a token from the currently active injector. inject
is only supported in an injection context. It can be used during:
- Construction (via the
constructor
) of a class being instantiated by the DI system, such as an@Injectable
or@Component
. - In the initializer for fields of such classes.
- In the factory function specified for
useFactory
of aProvider
or an@Injectable
. - In the
factory
function specified for anInjectionToken
. - In a stackframe of a function call in a DI context
inject<T>(token: ProviderToken<T>, flags: InjectOptions | InjectFlags = InjectFlags.Default): T | null
Parameters
token |
ProviderToken<T> |
A token that represents a dependency that should be injected. |
flags |
InjectOptions | InjectFlags |
Optional flags that control how injection is executed. The flags correspond to injection strategies that can be specified with parameter decorators Optional. Default is |
Returns
T | null
: the injected value if operation is successful, null
otherwise.
Throws
Error
if called outside of a supported context.
Overloads
|
token |
ProviderToken<T> |
A token that represents a dependency that should be injected. |
Returns
T
: the injected value if operation is successful, null
otherwise.
Throws
Error
if called outside of a supported context.
inject(token: ProviderToken<T>, flags?: InjectFlags): T | null
Deprecated prefer an options object instead of InjectFlags
Parameters
token |
ProviderToken<T> |
A token that represents a dependency that should be injected. |
flags |
InjectFlags |
Control how injection is executed. The flags correspond to injection strategies that can be specified with parameter decorators Optional. Default is |
Returns
T | null
: the injected value if operation is successful, null
otherwise.
Throws
Error
if called outside of a supported context.
inject(token: ProviderToken<T>, options: InjectOptions & { optional?: false; }): T
Parameters
token |
ProviderToken<T> |
A token that represents a dependency that should be injected. |
options |
InjectOptions & { optional?: false; } |
Control how injection is executed. Options correspond to injection strategies that can be specified with parameter decorators |
Returns
T
: the injected value if operation is successful.
Throws
Error
if called outside of a supported context, or if the token is not found.
inject(token: ProviderToken<T>, options: InjectOptions): T | null
Parameters
token |
ProviderToken<T> |
A token that represents a dependency that should be injected. |
options |
InjectOptions |
Control how injection is executed. Options correspond to injection strategies that can be specified with parameter decorators |
Returns
T | null
: the injected value if operation is successful, null
if the token is not found and optional injection has been requested.
Throws
Error
if called outside of a supported context, or if the token is not found and optional injection was not requested.
Usage notes
In practice the inject()
calls are allowed in a constructor, a constructor parameter and a field initializer:
@Injectable({providedIn: 'root'})
export class Car {
radio: Radio|undefined;
// OK: field initializer
spareTyre = inject(Tyre);
constructor() {
// OK: constructor body
this.radio = inject(Radio);
}
}
It is also legal to call inject
from a provider's factory:
providers: [
{provide: Car, useFactory: () => {
// OK: a class factory
const engine = inject(Engine);
return new Car(engine);
}}
]
Calls to the inject()
function outside of the class creation context will result in error. Most notably, calls to inject()
are disallowed after a class instance was created, in methods (including lifecycle hooks):
@Component({ ... })
export class CarComponent {
ngOnInit() {
// ERROR: too late, the component instance was already created
const engine = inject(Engine);
engine.start();
}
}
© 2010–2023 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v16.angular.io/api/core/inject