Wie kann ich dem Body- Tag eine Klasse hinzufügen, ohne den Body als App-Selektor festzulegen und die Host-Bindung zu verwenden?
Ich habe versucht, den Renderer zu verwenden, aber er verändert den ganzen Körper
Angular 2.x-Bindungsklasse für Body-Tag
Ich arbeite an einer großen Angular2-App und das Ändern des Root-Selektors wirkt sich auf viel Code aus. Ich muss viel Code ändern
Mein Anwendungsfall ist folgender:
Wenn ich eine modale Komponente öffne (dynamisch erstellt), soll die Dokument-Bildlaufleiste ausgeblendet werden
document.body.className|classList
?class
zubody
. Wenn Sie kein Server-Rendering oder keinen Web-Worker verwenden, wovor haben Sie Angst?Antworten:
Ich würde gerne einen Kommentar abgeben. Aber wegen fehlenden Rufs schreibe ich eine Antwort. Nun, ich kenne zwei Möglichkeiten, um dieses Problem zu lösen.
Gut und vielleicht sogar noch besser. Sie können den Renderer oder Renderer 2 (auf NG4) einfügen und die Klasse mit dem Renderer hinzufügen.
BEARBEITEN FÜR ANGULAR4:
quelle
import { DOCUMENT } from '@angular/platform-browser'
this.renderer.addClass(document.body, 'modal-open');
undthis.renderer.removeClass(document.body, 'modal-open');
@Inject(DOCUMENT)
wird im Konstruktor nicht mehr benötigtIch denke, der beste Weg, dies zu tun, ist eine Kombination beider Ansätze von DaniS oben: Verwenden des Renderers zum tatsächlichen Festlegen / Entfernen der Klasse, aber auch Verwenden des Dokumentinjektors, sodass es nicht stark von dem abhängt,
window.document
sondern dynamisch ersetzt werden kann (zB beim Rendern serverseitig). Der gesamte Code würde also so aussehen:quelle