Angular2 aggiunge class al tag body

Come posso aggiungere una class al tag body senza rendere il corpo come selettore app e utilizzare l’associazione host?

Ho provato a usare il Renderer ma cambia tutto il corpo

Classe bind angular 2.x sul tag del corpo

Sto lavorando su una grande app angular2 e la modifica del selettore di root avrà un impatto su molto codice, dovrò cambiare molto codice

Il mio caso d’uso è questo:

Quando apro un componente modale (creato dynamicmente) voglio hide la barra di scorrimento del documento

Mi piacerebbe commentare. Ma a causa della mancanza di reputazione scrivo una risposta. Bene, conosco due possibilità per risolvere questo problema.

  1. Inietti il ​​documento globale. Beh, potrebbe non essere la migliore pratica in quanto non so se nativescript ecc lo supporta. Ma è almeno meglio di usare puro JS.
 costruttore (documento privato @Inject (DOCUMENT): documento) {}

 ngOnInit () {
    this.document.body.classList.add ( 'test');
 }

Bene e forse anche meglio. Si potrebbe iniettare il renderer o il renderer 2 (su NG4) e aggiungere la class con il renderer.

 class di esportazione myModalComponent implementa OnDestroy {

   costruttore (renderer privato: renderer) {
     this.renderer.setElementClass (document.body, 'modal-open', true);
    }

   ngOnDestroy () {
     this.renderer.setElementClass (document.body, 'modal-open', false);
   }

MODIFICA DI ANGULAR4:

 class di esportazione myModalComponent implementa OnDestroy {

   costruttore (renderer privato: Renderer2) {
     this.renderer.addClass (document.body, 'modal-open');
    }

   ngOnDestroy () {
     this.renderer.removeClass (document.body, 'modal-open');
   }