Guías Detalladas
Componentes

Usando APIs del DOM

CONSEJO: Esta guía asume que ya has leído la Guía de Esenciales. Lee esa primero si eres nuevo en Angular.

Angular maneja la mayoría de la creación, actualización y eliminación del DOM por ti. Sin embargo, raramente podrías necesitar interactuar directamente con el DOM de un componente. Los componentes pueden inyectar ElementRef para obtener una referencia al elemento host del componente:

@Component({...})export class ProfilePhoto {  constructor() {    const elementRef = inject(ElementRef);    console.log(elementRef.nativeElement);  }}

La propiedad nativeElement hace referencia a la instancia del Element host.

Puedes usar las funciones afterEveryRender y afterNextRender de Angular para registrar un callback de renderizado que se ejecuta cuando Angular ha terminado de renderizar la página.

@Component({...})export class ProfilePhoto {  constructor() {    const elementRef = inject(ElementRef);    afterEveryRender(() => {      // Enfoca el primer elemento input en este componente.      elementRef.nativeElement.querySelector('input')?.focus();    });  }}

afterEveryRender y afterNextRender deben ser llamados en un contexto de inyección, típicamente el constructor de un componente.

Evita la manipulación directa del DOM siempre que sea posible. Siempre prefiere expresar la estructura de tu DOM en plantillas de componentes y actualizar ese DOM con enlaces.

Los callbacks de renderizado nunca se ejecutan durante el renderizado del lado del servidor o el pre-renderizado en tiempo de compilación.

Nunca manipules directamente el DOM dentro de otros hooks de ciclo de vida de Angular. Angular no garantiza que el DOM de un componente esté completamente renderizado en ningún punto que no sea en los callbacks de renderizado. Además, leer o modificar el DOM durante otros hooks de ciclo de vida puede impactar negativamente el rendimiento de la página causando layout thrashing.

Usar el renderer de un componente

Los componentes pueden inyectar una instancia de Renderer2 para realizar ciertas manipulaciones del DOM que están vinculadas a otras características de Angular.

Cualquier elemento DOM creado por el Renderer2 de un componente participa en la encapsulación de estilos de ese componente.

Ciertas APIs de Renderer2 también se vinculan al sistema de animaciones de Angular. Puedes usar el método setProperty para actualizar propiedades de animación sintéticas y el método listen para agregar event listeners para eventos de animación sintéticos. Consulta la guía de Animaciones para más detalles.

Aparte de estos dos casos de uso específicos, no hay diferencia entre usar Renderer2 y las APIs nativas del DOM. Las APIs de Renderer2 no admiten manipulación del DOM en contextos de renderizado del lado del servidor o pre-renderizado en tiempo de compilación.

Cuándo usar APIs del DOM

Aunque Angular maneja la mayoría de las preocupaciones de renderizado, algunos comportamientos pueden requerir el uso de APIs del DOM. Algunos casos de uso comunes incluyen:

Evita insertar, eliminar y modificar elementos del DOM. En particular, nunca establezcas directamente la propiedad innerHTML de un elemento, lo cual puede hacer que tu aplicación sea vulnerable a ataques de cross-site scripting (XSS). Los enlaces de plantilla de Angular, incluyendo los enlaces para innerHTML, incluyen salvaguardas que ayudan a proteger contra ataques XSS. Consulta la guía de Seguridad para más detalles.