Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

157
Vistas
Angular2 agrega clase a la etiqueta del cuerpo

¿Cómo puedo agregar una clase a la etiqueta del cuerpo sin hacer que el cuerpo sea el selector de aplicaciones y usar el enlace de host?

Intenté usar el Renderer pero cambia todo el cuerpo.

Clase de enlace angular 2.x en la etiqueta del cuerpo

Estoy trabajando en una gran aplicación angular2 y cambiar el selector raíz afectará mucho código, tendré que cambiar mucho código

Mi caso de uso es este:

Cuando abro un componente modal (creado dinámicamente) quiero que la barra de desplazamiento del documento se oculte

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Me encantaría comentar. Pero debido a la falta de reputación, escribo una respuesta. Bueno, conozco dos posibilidades para resolver este problema.

  1. Inyectar el Documento Global. Bueno, puede que no sea la mejor práctica, ya que no sé si nativescript, etc., lo admite. Pero es al menos mejor que usar JS puro.
 constructor(@Inject(DOCUMENT) private document: Document) {} ngOnInit(){ this.document.body.classList.add('test'); }

Bueno y tal vez incluso mejor. Puede inyectar el renderizador o renderer 2 (en NG4) y agregar la clase con el renderizador.

 export class myModalComponent implements OnDestroy { constructor(private renderer: Renderer) { this.renderer.setElementClass(document.body, 'modal-open', true); } ngOnDestroy(): void { this.renderer.setElementClass(document.body, 'modal-open', false); } }

EDITAR PARA ANGULAR4:

 import { Component, OnDestroy, Renderer2 } from '@angular/core'; export class myModalComponent implements OnDestroy { constructor(private renderer: Renderer2) { this.renderer.addClass(document.body, 'modal-open'); } ngOnDestroy(): void { this.renderer.removeClass(document.body, 'modal-open'); } }
about 4 years ago · Santiago Trujillo Denunciar

0

Creo que la mejor manera de hacerlo es una combinación de los dos enfoques de DaniS anteriores: usar el renderizador para configurar/eliminar la clase, pero también usar el inyector de documentos, por lo que no depende en gran medida de window.document pero eso puede ser reemplazado dinámicamente (por ejemplo, al renderizar del lado del servidor). Así que todo el código se vería así:

 import { DOCUMENT } from '@angular/common'; import { Component, Inject, OnDestroy, OnInit, Renderer2 } from '@angular/core'; @Component({ /* ... */ }) export class MyModalComponent implements OnInit, OnDestroy { constructor ( @Inject(DOCUMENT) private document: Document, private renderer: Renderer2, ) { } ngOnInit(): void { this.renderer.addClass(this.document.body, 'embedded-body'); } ngOnDestroy(): void { this.renderer.removeClass(this.document.body, 'embedded-body'); } }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda