Изменить класс хоста, когда mouseenter/mouseleave на дочернем элементе шаблонов с @HostBinding в Angular 2

Есть ли способ использовать @HostBinding динамически, когда мы запускаем событие mouseeneter/mouseleave для дочернего элемента в шаблоне, то есть:

в template.component.html

<div class="test-btn"
   (mouseenter)="mouseenter()"
   (mouseleave)="mouseleave()">
</div>

и в template.component.ts

@HostBinding('class') classes = this.getMouseClass();

где:

private getStateClass() {
    const mouse = this.mouseState ? 'mouse-enter' : 'mouse-leave';
    return `${mouse}`;
}

mouseenter() {
    this.mouseState = true;
}

mouseleave() {
    this.mouseState = false;
}

1 ответ

Вы можете добавлять / удалять статические классы только с @HostBinding()

@HostBinding('class.myclass')
mouseState = false;

mouseenter() {
    this.mouseState = true;
}

mouseleave() {
    this.mouseState = false;
}

Если вам нужны динамические классы, вы можете ввести ElementRef и добавить / удалить класс обязательно

constructor(elRef:ElementRef) {}

private setStateClass(bool add) {
  this.elRef.nativeElement.classList.add('mouse-enter', add);
  this.elRef.nativeElement.classList.add('mouse-leave', !add);
}

mouseenter() {
    this.setStateClass(true);
}

mouseleave() {
    this.setStateClass(false);
}
Другие вопросы по тегам