Eine Option ist die Verwendung eines template reference variable.
In dem folgenden Beispiel wird die Referenzgröße #target
zu dem gewünschten Element hinzugefügt und dann die decorator @ViewChild
(@ViewChild('target') target
) ermöglicht die Variable in der Komponente zuzugreifen.
Von dort können Sie einen Verweis auf das DOM-Element erhalten, indem Sie auf nativeElement
property für die Variable zugreifen. Hier
ist ein Beispiel, wo der Klassenname aktualisiert:
import { Component, AfterViewInit, ViewChild } from '@angular/core';
@Component({
selector: 'main',
template: `
<div #target class="current">
</div>
`
})
export class MainComponent implements AfterViewInit {
@ViewChild('target') target;
constructor() { }
ngAfterViewInit(): void {
let element = this.target.nativeElement;
element.className = 'next';
}
}
Allerdings ist es erwähnenswert, dass Sie die meisten DOM-Manipulation mit der build-in DOM-Richtlinien umgehen können. In diesem Fall könnten Sie einfach die ngClass
directive verwenden, um eine Variable mit dem Klassenattribut zu binden:
import { Component, AfterViewInit } from '@angular/core';
@Component({
selector: 'main',
template: `
<div [ngClass]="targetClass">
</div>
`
})
export class MainComponent implements AfterViewInit {
private targetClass: string = 'current';
constructor() { }
ngAfterViewInit(): void {
this.targetClass = 'next';
}
}
Dank Josh für Sie schnelle Antwort. es funktioniert wunderbar. – mohsen
Gibt es einen bestimmten Grund, warum Sie '@ViewChild ('target') target;' anstelle des explizit eingetippten '@ViewChild (' target ') Ziels vorgeschlagen haben: QueryList; '? –
können Sie auch @HostBinding ('class') private targetClass verwenden, um die Klassenänderung zu behandeln. –