Обновление углового v16

В v16 Angular заменяет функцию на чистую с именем runInInjectionContext, которая принимает любой injector и запускает код внутри контекста внедрения:

import { runInInjectionContext } from '@angular/core';

export class FooComponent {
  ngOnInit() {
    runInInjectionContext(this.injector, () => {
      console.log(
        'I can access the NodeInjector using inject()',
        inject(ElementRef)
      );
    })
}

Angular v14.10 представляет EnvironmentInjector.runInContext API. Используя эту функцию, мы можем запустить функцию в контексте injector.

В результате inject() доступен в теле функции для внедрения зависимостей при необходимости.

Эта функциональность может быть полезна для разработки эргономичных API-интерфейсов в Angular и за его пределами, поскольку она должна включать более мелкие и функциональные API-интерфейсы.

Давайте представим, что у нас есть компонент действий, который принимает список действий:

Мы ожидаем список действий, реализующих Action. При нажатии на действие мы вызываем runInContext(), передавая замыкание, которое выполняется внутри контекста этого инжектора среды.

В результате мы можем использовать inject() в любом Action.invoke() методе, если это необходимо. Например, давайте создадим CopyAction:

Таким образом, пользователь может выбрать, использовать ли DI в действиях или нет.

Давайте посмотрим, как Angular собирается использовать эту функциональность. В v14.2.0 маршрутизатор позволяет предоставлять простые функции для сторожей и резолверов:

Мы сможем предоставлять перехватчики в виде простых функций в пакете HTTP и лениво загружаемых модулей:

Подпишитесь на меня в Medium или Twitter, чтобы узнать больше об Angular и JS!