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