Обновление углового 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!