¿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 de 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
document.body.className|classList
?class
abody
. Si no va a utilizar la representación del servidor o el trabajador web, ¿a qué le tiene miedo?Respuestas:
Me encantaría comentar. Pero debido a la falta de reputación, escribo una respuesta. Bueno, conozco dos posibilidades para solucionar este problema.
Bueno y quizás incluso mejor. Puede inyectar el renderizador o el renderizador 2 (en NG4) y agregar la clase con el renderizador.
EDITAR PARA ANGULAR4:
fuente
import { DOCUMENT } from '@angular/platform-browser'
this.renderer.addClass(document.body, 'modal-open');
ythis.renderer.removeClass(document.body, 'modal-open');
@Inject(DOCUMENT)
ya no se necesita en el constructorCreo que la mejor manera de hacerlo es una combinación de ambos enfoques de DaniS anterior: usar el renderizador para establecer / eliminar la clase, pero también usar el inyector de documentos, por lo que no depende en gran medida del
window.document
pero que se puede reemplazar dinámicamente (por ejemplo, al renderizar el lado del servidor). Entonces, todo el código se vería así:fuente