I have a PARENT component which has a CHILD component. This PARENT component holds ng-template which will be bound into the CHILD component.
In order to style the ng-container's element (svg), I used ng-deep and it worked.
What I want now is to dynamically add a class to the ng-container's element (svg) from the CHILD component (like ngClass);
Please see my code below for better understading.
PARENT
HTML:
... <app-input [icon]="userIcon"></app-input> ... <!-- TEMPLATES --> <ng-template #userIcon> <svg>...</svg> </ng-template> CHILD
HTML:
<ng-container *ngIf="$icon" [ngTemplateOutlet]="$icon"></ng-container> ... TYPESCRIPT:
export class InputComponent implements ControlValueAccessor { ... @Input('icon') public $icon: TemplateRef<any>; private color: boolean = false; // --> When this is true, apply a new class public onFocus(): void { this.color = true; } ... SCSS:
::ng-deep { svg { transition: .3s fill; fill: map-get($colors, placeholder); } } 1 Answer
with ng-container you can pass context like
<ng-container [ngTemplateOutlet]="user;context: {color: className}></ng-container> then you can use it like in template
<ng-template let-color="color"> <div [class]="color"></div> </ng-template> 1