I created the following simple example component that adds some attributes and listener to the component DOM element using the host property of the @Component decorator. In my c
ngClass is a directive and can't be used in host bindings. Host bindings only supports
'[propName]':'expr''[attr.attrName]':'expr' (event)="someFunction(event);otherExpr", [style.width]="booleanExpr" [class.className]="booleanExpr" binding.[class]="expr" where expr is a string with space separated classesThis works for me and it's pretty modular:
import { Component, HostBinding, Input } from '@angular/core'
type Directions = 'vertical' | 'horizontal'
/**
* A hairline.
*/
@Component({
selector: 'hairline',
styleUrls: ['./hairline.component.scss'],
template: '',
})
export class HairlineComponent {
@Input() direction: Directions = 'horizontal'
@Input() padding = false
@HostBinding('class')
get classes(): Record<string, boolean> {
return {
[this.direction]: true,
padding: this.padding,
}
}
}
Here are two different ways to bind a host element class to a property using the @HostBinding decorator:
@HostBinding('class.enabled') private get isEnabled() { // use getter to reflect external value
return this.selectionService.state.isEnabled;
}
@HostBinding('class.selected') private isSelected = false; // setting this add/removes 'selected' class
constructor(private selectionService: SelectionService) {
this.selectionService.select$.subscribe(isSelected => {
this.isSelected = isSelected;
});
}