I am trying to build an Angular Directive where I want to achieve following things based on some config input values
- Add element in DOM based on input values. (Just like ngIf)
- Add some styling to element if its rendered
- Add some attribute properties like disabledto element
As per my little bit knowledge and understanding of Angular, we can achieve 1st requirement using Structural Directive. Where as for 2nd & 3rd requirement we need to create Attribute Directive. Here is my implementation for both directives
import { SomeService } from './some.service';
import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
@Directive({ selector: '[structuralBehaviour]' })
export class StructuralBehaviourDirective {
    constructor(private templateRef: TemplateRef<any>,
        private viewContainer: ViewContainerRef, private someService: SomeService) { }
    @Input() set structuralBehaviour(config: any) {
        // 1st Condition
        // Conditional Stamentents using config and somService
        // For the purpose to decide whether to add template in
        // DOM or not
        this.viewContainer.createEmbeddedView(this.templateRef);
   }
}
Here is Attribute Directive
import { SomeService } from './some.service';
import { Directive, ElementRef, Input, Renderer } from '@angular/core';
@Directive({ selector: '[attributeBehaviour]' })
export class AttributeBehaviourDirective {
    constructor(private _renderer: Renderer, private _el: ElementRef,
    private someService: SomeService) { }
    @Input() set attributeBehaviour(config: any) {
        // 2nd Condition
        // Conditional Stamentents using config and someService
        // For the purpose to set style visibility property to hidden
        this._el.nativeElement.style.visibility = 'hidden';
        // 3rd Condition
        // Conditional Stamentents using config and someService
        // For the purpose to add disabled attribute
        this._renderer.setElementProperty(this._el.nativeElement, 'disabled, true);
    }
}
Currently, I am using above directives like follows which works fine for me
<button *structuralBehaviour="config" [attributeBehaviour]="config"
 class="btn btn-primary">Add</button> 
What I am looking out here is answer to question, Is it possible to merge both of above directive together and build single directive out of it so that I can use them something like this
<button *singleBehaviour="config" class="btn btn-primary">Add</button> 
 
    