Spec-Zone.ru › Angular

inject

Внедряет токен из текущего активного инжектора. inject поддерживается только в контексте внедрения зависимостей. Его можно использовать во время:

  • Создания (через constructor) класса, экземпляр которого создаётся системой DI, например @Injectable или @Component.
  • Инициализации полей таких классов.
  • В фабричной функции, заданной для useFactory у Provider или @Injectable.
  • В функции factory, заданной для InjectionToken.
  • В стеке вызовов функции в контексте DI.
Внедрение зависимостей с помощью inject()

API

function inject<T>(token: ProviderToken<T>): T;
function inject<T>(
  token: ProviderToken<T>,
  options: InjectOptions & { optional?: false | undefined },
): T;
function inject<T>(token: ProviderToken<T>, options: InjectOptions): T | null;
function inject(token: HostAttributeToken): string;
function inject(
  token: HostAttributeToken,
  options: { optional: true },
): string | null;
function inject(
  token: HostAttributeToken,
  options: { optional: false },
): string;
function inject<T>(token: ProviderToken<T>): T;
@paramtokenProviderToken<T>

Токен, представляющий зависимость, которую необходимо внедрить.

@returnsT

внедрённое значение, если операция выполнена успешно, и null в противном случае.

function inject<T>(token: ProviderToken<T>, options: InjectOptions & { optional?: false | undefined; }): T;
@paramtokenProviderToken<T>

Токен, представляющий зависимость, которую необходимо внедрить.

@paramoptionsInjectOptions & { optional?: false | undefined; }

Управляет выполнением внедрения. Параметры соответствуют стратегиям внедрения, которые можно задать с помощью декораторов параметров @Host, @Self, @SkipSelf и @Optional.

@returnsT

внедрённое значение, если операция выполнена успешно.

function inject<T>(token: ProviderToken<T>, options: InjectOptions): T | null;
@paramtokenProviderToken<T>

Токен, представляющий зависимость, которую необходимо внедрить.

@paramoptionsInjectOptions

Управляет выполнением внедрения. Параметры соответствуют стратегиям внедрения, которые можно задать с помощью декораторов параметров @Host, @Self, @SkipSelf и @Optional.

@returnsT | null

внедрённое значение, если операция выполнена успешно; null, если токен не найден и запрошено необязательное внедрение.

function inject(token: HostAttributeToken): string;
@paramtokenHostAttributeToken

Токен, представляющий статический атрибут узла-хоста, который необходимо внедрить.

@returnsstring

Значение атрибута, если он существует.

function inject(token: HostAttributeToken, options: { optional: true; }): string | null;
@paramtokenHostAttributeToken

Токен, представляющий статический атрибут узла-хоста, который необходимо внедрить.

@paramoptions{ optional: true; }
@returnsstring | null

Значение атрибута, если он существует, в противном случае — null.

function inject(token: HostAttributeToken, options: { optional: false; }): string;
@paramtokenHostAttributeToken

Токен, представляющий статический атрибут узла-хоста, который необходимо внедрить.

@paramoptions{ optional: false; }
@returnsstring

Значение атрибута, если он существует.

Примечания по использованию

На практике вызовы inject() разрешены в конструкторе, параметре конструктора и инициализаторе поля:

@Injectable({providedIn: 'root'})
export class Car {
  radio: Radio|undefined;
  // OK: field initializer
  spareTyre = inject(Tyre);

  constructor() {
    // OK: constructor body
    this.radio = inject(Radio);
  }
}

Также допустимо вызывать inject из фабрики провайдера:

providers: [
  {provide: Car, useFactory: () => {
    // OK: a class factory
    const engine = inject(Engine);
    return new Car(engine);
  }}
]

Вызовы функции inject() вне контекста создания класса приведут к ошибке. В частности, вызовы inject() запрещены после создания экземпляра класса, в методах (включая хуки жизненного цикла):

@Component({ ... })
export class CarComponent {
  ngOnInit() {
    // ERROR: too late, the component instance was already created
    const engine = inject(Engine);
    engine.start();
  }
}

Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/core/inject

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API