d48cda4081
CI / Test (ubuntu-latest, Node 18.x, bun) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, npm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, pnpm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, yarn) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 20.x, bun) (push) Failing after 17m13s
CI / Test (ubuntu-latest, Node 20.x, npm) (push) Failing after 18m42s
CI / Test (ubuntu-latest, Node 20.x, pnpm) (push) Failing after 15m0s
CI / Test (ubuntu-latest, Node 20.x, yarn) (push) Failing after 49m44s
CI / Test (ubuntu-latest, Node 22.x, bun) (push) Failing after 51m55s
CI / Test (ubuntu-latest, Node 22.x, pnpm) (push) Failing after 21m57s
CI / Test (ubuntu-latest, Node 22.x, npm) (push) Failing after 37m39s
CI / Test (ubuntu-latest, Node 22.x, yarn) (push) Failing after 34m7s
CI / Validate Components (push) Failing after 37m15s
CI / Python Tests (push) Failing after 10m1s
CI / Security Scan (push) Failing after 10m1s
CI / Lint (push) Failing after 17m12s
CI / Coverage (push) Failing after 20m19s
CI / Test (macos-latest, Node 18.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, yarn) (push) Has been cancelled
64 lines
1.9 KiB
Markdown
64 lines
1.9 KiB
Markdown
# Injection Context
|
|
|
|
The `inject()` function can only be used when code is executing within an **injection context**.
|
|
|
|
## Where is an Injection Context Available?
|
|
|
|
An injection context is automatically available in:
|
|
|
|
1. **Field initializers** of classes instantiated by DI (`@Injectable`, `@Component`, `@Directive`, `@Pipe`).
|
|
2. **Constructors** of classes instantiated by DI.
|
|
3. **Factory functions** specified in `useFactory` or `InjectionToken` configurations.
|
|
4. **Functional APIs** executed by Angular (e.g., functional route guards, resolvers, interceptors).
|
|
|
|
```ts
|
|
@Component({...})
|
|
export class Example {
|
|
// Valid: Field initializer
|
|
private router = inject(Router);
|
|
|
|
constructor() {
|
|
// Valid: Constructor
|
|
const http = inject(HttpClient);
|
|
}
|
|
|
|
onClick() {
|
|
// Invalid: Not an injection context
|
|
// const auth = inject(AuthService);
|
|
}
|
|
}
|
|
```
|
|
|
|
## `runInInjectionContext`
|
|
|
|
If you need to run a function within an injection context (often needed for dynamic component creation or testing), use `runInInjectionContext`. This requires access to an existing injector (like `EnvironmentInjector` or `Injector`).
|
|
|
|
```ts
|
|
import {Injectable, inject, EnvironmentInjector, runInInjectionContext} from '@angular/core';
|
|
|
|
@Injectable({providedIn: 'root'})
|
|
export class MyService {
|
|
private injector = inject(EnvironmentInjector);
|
|
|
|
doSomethingDynamic() {
|
|
runInInjectionContext(this.injector, () => {
|
|
// Now valid to use inject() here
|
|
const router = inject(Router);
|
|
});
|
|
}
|
|
}
|
|
```
|
|
|
|
## `assertInInjectionContext`
|
|
|
|
Use `assertInInjectionContext` in utility functions to guarantee they are called from a valid context. It throws a clear error if not.
|
|
|
|
```ts
|
|
import {assertInInjectionContext, inject, ElementRef} from '@angular/core';
|
|
|
|
export function injectNativeElement<T extends Element>(): T {
|
|
assertInInjectionContext(injectNativeElement);
|
|
return inject(ElementRef).nativeElement;
|
|
}
|
|
```
|