Для управления CSS классами в Angular можно использовать сервис HostBinding. Сервис HostBinding позволяет подключить декоратор к свойству директивы или компонента, чтобы настроить связь между значением этого свойства и атрибутами, классами или стилями хост-элемента.
Чтобы создать сервис для управления CSS классами в Angular, вам понадобится выполнить следующие шаги:
- Импортируйте необходимые модули:
import { Directive, ElementRef, Renderer2 } from '@angular/core';
- Создайте декоратор
@Directive
, который будет использоваться для добавления сервиса к элементам:
@Directive({ selector: '[classManager]' }) export class ClassManagerDirective { constructor(private el: ElementRef, private renderer: Renderer2) { } }
- Создайте методы и свойства в сервисе. Например, вы можете создать свойство
isActive
, которое будет определять, должен ли элемент иметь класс "active":
@Directive({ selector: '[classManager]' }) export class ClassManagerDirective { isActive: boolean = false; constructor(private el: ElementRef, private renderer: Renderer2) { } }
- Используйте декоратор
@HostBinding
, чтобы установить значение атрибута класса на основе свойстваisActive
. В этом примере мы использовалиisActive
для добавления или удаления класса "active":
@Directive({ selector: '[classManager]' }) export class ClassManagerDirective { isActive: boolean = false; @HostBinding('class.active') get activeClass() { return this.isActive; } constructor(private el: ElementRef, private renderer: Renderer2) { } }
- Добавьте методы для управления классами. Например, вы можете добавить метод
toggleActive
, который будет переключать значение свойстваisActive
и изменять класс "active":
@Directive({ selector: '[classManager]' }) export class ClassManagerDirective { isActive: boolean = false; @HostBinding('class.active') get activeClass() { return this.isActive; } constructor(private el: ElementRef, private renderer: Renderer2) { } toggleActive() { this.isActive = !this.isActive; } }
- Используйте созданный сервис в компоненте или директиве:
@Component({ selector: 'app-example', template: `<button (click)="classManager.toggleActive()">Toggle</button>`, }) export class ExampleComponent { constructor(public classManager: ClassManagerDirective) { } }
В результате созданная директива classManager
будет иметь возможность управлять CSS классами хост-элемента. Вы можете вызвать метод toggleActive
для переключения класса, и при изменении значения свойства isActive
класс "active" будет добавляться или удаляться.