angular - What is ng-template and why do I bind *ngIf then else to it? -


when use *ngif and/or else statement, why have bind template variable attached ng-template element? example:

this works:

<div *ngif="show; else elseblock">text show</div> <ng-template #elseblock>alternate text while primary text hidden</ng-template> 

but not work:

<div *ngif="show; else elseblock">text show</div> <div #elseblock>alternate text while primary text hidden</div> 

i noticed adding class not work either:

<ng-template #elseblock class="my-class">   alternate text while primary text hidden </ng-template> 

what's special ng-template? how different?

this because structural directives in angular create embedded views. embedded view created using both templateref , viewcontainerref. can read more them in exploring angular dom manipulation techniques using viewcontainerref.

an embedded view similar host views created components. view contains nodes see in component template or inside ng-template tag. embedded view component template without component class. here few examples of how structural directives create embedded views.

ngif

  private _updateview() {     if (this._context.$implicit) {       ...         if (this._thentemplateref) {           this._thenviewref =               // here embedded view created               this._viewcontainer.createembeddedview(this._thentemplateref, this._context);         }       }     } else {       if (!this._elseviewref) {        ...           this._elseviewref =               // here embedded view created               this._viewcontainer.createembeddedview(this._elsetemplateref, this._context);         }       }     }   } 

ngfor

  private _applychanges(changes: iterablechanges<t>) {     const inserttuples: recordviewtuple<t>[] = [];     changes.foreachoperation(         (item: iterablechangerecord<any>, adjustedpreviousindex: number, currentindex: number) => {           if (item.previousindex == null) {             // here embedded view created             const view = this._viewcontainer.createembeddedview(                 this._template, new ngforofcontext<t>(null !, this.ngforof, -1, -1), currentindex); 

Comments

Popular posts from this blog

node.js - Node js - Trying to send POST request, but it is not loading javascript content -

javascript - Replicate keyboard event with html button -

javascript - Web audio api 5.1 surround example not working in firefox -