Using a custom directive how would you add/remove a class on the host element based on a specific conditions?
Example:
@Directive({
selector: '[customDirective]'
})
export class CustomDirective {
constructor(service: SomService) {
// code to add class
if (service.someCondition()) {
// code to remove class
}
}
}
If you don't want to use the ngClass
directive (Hint: you can pass a function to [ngClass]="myClasses()"
if it would be to messy inline in your template) you can just utilize the Renderer2
for it to add one or more classes:
export class CustomDirective {
constructor(private renderer: Renderer2,
private elementRef: ElementRef,
service: SomService) {
}
addClass(className: string, element: any) {
this.renderer.addClass(element, className);
// or use the host element directly
// this.renderer.addClass(this.elementRef.nativeElement, className);
}
removeClass(className: string, element: any) {
this.renderer.removeClass(element, className);
}
}