Guias Detalhados
Dependency Injection

DI em ação

Este guia explora recursos adicionais de dependency injection no Angular.

NOTA: Para cobertura abrangente de InjectionToken e providers customizados, veja o guia de definição de providers de dependência.

Injetar o elemento DOM do component

Embora desenvolvedores se esforcem para evitar isso, alguns efeitos visuais e ferramentas de terceiros requerem acesso direto ao DOM. Como resultado, você pode precisar acessar o elemento DOM de um component.

O Angular expõe o elemento subjacente de um @Component ou @Directive via injeção usando o token de injeção ElementRef:

import { Directive, ElementRef } from '@angular/core';@Directive({selector: '[appHighlight]'})export class HighlightDirective {private element = inject(ElementRef)update() {this.element.nativeElement.style.color = 'red';}}

Resolver dependências circulares com uma referência forward

A ordem de declaração de classe importa no TypeScript. Você não pode se referir diretamente a uma classe até que ela tenha sido definida.

Isso geralmente não é um problema, especialmente se você adere à regra recomendada de uma classe por arquivo. Mas às vezes referências circulares são inevitáveis. Por exemplo, quando a classe 'A' se refere à classe 'B' e 'B' se refere a 'A', uma delas tem que ser definida primeiro.

A função forwardRef() do Angular cria uma referência indireta que o Angular pode resolver posteriormente.

Você enfrenta um problema similar quando uma classe faz uma referência a si mesma. Por exemplo, no seu array providers. O array providers é uma propriedade da função decorator @Component(), que deve aparecer antes da definição da classe. Você pode quebrar tais referências circulares usando forwardRef.

app.component.ts

providers: [  {    provide: PARENT_MENU_ITEM,    useExisting: forwardRef(() => MenuItem),  },],