Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically mount angular 2 directive [duplicate]

Tags:

Context

I have a simple directive that add some attributes to a given HTML element based on received attributes.

<button class="btn btn-blue x-large" [myDirective]="{ some_json_data: true }">
    Unfold
</button>

The myDirective directive just does some logic in the ngOnInit hook and decorates the ElementRef native element (in this case the button) adding attributes, nothing complicated.

ngOnInit(): void {
  const el: Element = this.element.nativeElement;
  this.decorate(el, this.myDirective);
}

Problem

Based on a given logic (in myDirective decoration) I want to add a tooltip (which is another directive) to the element referenced by ElementRef at myDirective.

How do I mount a directive manually and how do I add it to an element (ViewContainerRef)?

like image 951
Miguel Lattuada Avatar asked Jul 13 '17 14:07

Miguel Lattuada


2 Answers

Adding or removing directives dynamically is not supported. Only components can be added and removed dynamically (only dynamically added components can be removed dynamically).

like image 164
Günter Zöchbauer Avatar answered Sep 30 '22 13:09

Günter Zöchbauer


You do not add or remove directives dynamically, but if you want to add a tooltip you have to insert a div in your component template that activates it depending on a variable status

<div [hidden]="tooltipnotshown"
     class="tooltip">
 blah blah or whatever ...
</div>
like image 20
sancelot Avatar answered Sep 30 '22 15:09

sancelot