In Angular 1 sollten alle DOM-Manipulationen in Direktiven vorgenommen werden, um eine korrekte Testbarkeit sicherzustellen, aber was ist mit Angular 2? Wie hat sich das geändert?Wohin gehört die DOM-Manipulation in Angular 2?
Ich habe nach guten Artikeln gesucht oder nach Informationen darüber, wo man DOM manipulieren kann und wie man dabei denkt, aber ich komme jedes Mal leer.
Nehmen Sie diese Komponente zum Beispiel (das ist wirklich eine Richtlinie aber sie behauptet, dass es nicht):
export class MyComponent {
constructor(private _elementRef: ElementRef) {
this.setHeight();
window.addEventListener('resize', (e) => {
this.setHeight();
});
}
setHeight() {
this._elementRef.nativeElement.style.height = this.getHeight() + 'px';
}
getHeight() {
return window.innerHeight;
}
}
Hat Ereignisbindung zum Beispiel in einem Konstruktor gehört, oder sollte dies in der ngAfterViewInit
Funktion gesetzt werden oder irgendwo anders? Sollten Sie versuchen, die DOM-Manipulation einer Komponente in eine Direktive zu überführen?
Es ist alles nur eine Unschärfe im Moment, also bin ich mir nicht sicher, ob ich das richtig mache und ich bin mir sicher, dass ich nicht der Einzige bin.
Welche Regeln gelten für die DOM-Manipulation in Angular2?
Können Sie es ausarbeiten? – Chrillewoodz
'@HostListener (...)' registriert einen Event-Listener und '@HostBinding (...)' aktualisiert den 'height' Style-Wert auf den Wert, der' number' zugewiesen ist. Der Ereignishandler war nicht korrekt. Ich habe meine Antwort aktualisiert (tut mir leid, war nur am Telefon, als ich es schrieb). –
Die direkte DOM-Manipulation ist nicht mit dem serverseitigen Rendern und der Verwendung der Angulars WebWorker-Unterstützung kompatibel. –