Jak mogę dodać klasę do tagu body bez tworzenia treści jako selektora aplikacji i używania powiązania hosta?
Próbowałem użyć Renderera, ale zmienia to całe ciało
Klasa wiązania Angular 2.x w tagu body
Pracuję nad dużą aplikacją angular2 i zmiana selektora głównego będzie miała wpływ na wiele kodu, będę musiał zmienić dużo kodu
Mój przypadek użycia jest następujący:
Kiedy otwieram komponent modalny (tworzony dynamicznie) chcę, aby pasek przewijania dokumentu był ukryty
document.body.className|classList
?class
dobody
. Jeśli nie zamierzasz korzystać z renderowania serwera lub programu Web Worker, czego się boisz?Odpowiedzi:
Bardzo chciałbym to skomentować. Ale z powodu braku reputacji piszę odpowiedź. Cóż, znam dwie możliwości rozwiązania tego problemu.
Cóż, a może nawet lepiej. Możesz wstrzyknąć moduł renderujący lub moduł renderujący 2 (na NG4) i dodać klasę z mechanizmem renderującym.
EDYCJA DLA ANGULAR4:
źródło
import { DOCUMENT } from '@angular/platform-browser'
this.renderer.addClass(document.body, 'modal-open');
ithis.renderer.removeClass(document.body, 'modal-open');
@Inject(DOCUMENT)
nie jest już potrzebny w konstruktorzeMyślę, że najlepszym sposobem na to jest połączenie obu podejść DaniSa powyżej: użycie renderera do faktycznego ustawienia / usunięcia klasy, ale także użycie wtryskiwacza dokumentów, więc nie jest silnie zależny od,
window.document
ale można go dynamicznie zastąpić (np. podczas renderowania po stronie serwera). Więc cały kod wyglądałby tak:źródło