coreui-angular-ex
Version:
CoreUI Components Library for Angular
51 lines (43 loc) • 1.48 kB
text/typescript
import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';
({
selector: '[cHtmlAttr]',
exportAs: 'cHtmlAttr',
standalone: true
})
export class HtmlAttributesDirective implements OnInit {
() cHtmlAttr?: { [key: string]: any };
constructor(
private renderer: Renderer2,
private el: ElementRef
) {}
ngOnInit(): void {
const attribs = this.cHtmlAttr;
for (const attr in attribs) {
if (attr === 'style' && typeof (attribs[attr]) === 'object') {
this.setStyle(attribs[attr]);
} else if (attr === 'class') {
this.addClass(attribs[attr]);
} else {
this.setAttrib(attr, attribs[attr]);
}
}
}
private setStyle(styles: { [x: string]: any; }): void {
for (const style in styles) {
if (style) {
this.renderer.setStyle(this.el.nativeElement, style, styles[style]);
}
}
}
private addClass(classes: string | string[]): void {
const classArray = (Array.isArray(classes) ? classes : classes.split(' '));
classArray.filter((element) => element.length > 0).forEach(element => {
this.renderer.addClass(this.el.nativeElement, element);
});
}
private setAttrib(key: string, value: string | null): void {
value !== null ?
this.renderer.setAttribute(this.el.nativeElement, key, value) :
this.renderer.removeAttribute(this.el.nativeElement, key);
}
}