Один из вариантов заключается в использовании template reference variable.
В приведенном ниже примере ссылочная переменная #target
добавлена в нужный элемент, а затем decorator @ViewChild
(@ViewChild('target') target
) позволяет получить доступ к переменной в вашем компоненте.
Оттуда вы можете получить ссылку на элемент DOM, обратившись к переменной nativeElement
property.
Вот пример, в котором обновляется имя класса:
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';
}
}
Тем не менее, стоит отметить, что вы можете работать с большинством манипуляции DOM с наращиванием в директивах DOM. В этом случае вы можете просто использовать ngClass
directive для привязки переменной с атрибутом класса:
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';
}
}
Спасибо, Джош, за быстрый ответ. он работает красиво. – mohsen
Есть ли какая-то особая причина, по которой вы предложили «@ViewChild (« target ») target; вместо явно заданной цели @ViewChild ('target'): QueryList;'? –
вы также можете использовать privateHostBinding ('class') private TargetClass для обработки изменения класса. –