Вы можете добавить еще один необязательный входной параметр Shape и с помощью Renderer2 Service можете добавить любой CSS.
import { Directive, Renderer, ElementRef } from '@angular/core';
@Directive({
selector: '[my-label]'
})
export class ExploreRendererDirective {
private nativeElement : Node;
@Input() shape: 'default'| 'circle' = 'default';
@Input() type: LabelType = Default;
constructor( private renderer : Renderer2, private element : ElementRef )
{
this.nativeElement = element.nativeElement;
if (this.shape === 'circle') {
// Add css classes for circle.
this.renderer.setAttribute(nativeElement, 'class', 'your-class-here');
}
}
}
// for default
<label my-label type='error'>foo</label>
// for circle
<label my-label type='error' [shape]="'circle'">foo</label>
Или второе решение - создать две директивы.
import { Directive, Renderer, ElementRef } from '@angular/core';
@Directive({
selector: '[my-label]'
})
export class ExploreRendererDirective {
private nativeElement : Node;
@Input() type: LabelType = Default;
constructor( private renderer : Renderer2, private element : ElementRef
)
{
this.nativeElement = element.nativeElement;
}
}
import { Directive, Renderer, ElementRef } from '@angular/core';
@Directive({
selector: '[label-circle]'
})
export class ExploreRendererDirective {
private nativeElement : Node;
@Input() type: LabelType = Default;
constructor( private renderer : Renderer2, private element : ElementRef
)
{
this.nativeElement = element.nativeElement;
// Add css classes for circle.
this.renderer.setAttribute(nativeElement, 'class', 'your-class-here');
}
}
// for default
<label my-label type='error' label-circle>foo</label>
Также вы можете использовать наследование для улучшения решения.
Надеюсь, это поможет вам !!