文档(https://angular.io/guide/template-syntax#!#star-template)提供了以下示例。假设我们有这样的模板代码:
<hero-detail *ngIf="currentHero" [hero]="currentHero"></hero-detail>
在渲染之前,它将被“消除糖化”。也就是说,星号符号将被转录为该符号:
<template [ngIf]="currentHero">
<hero-detail [hero]="currentHero"></hero-detail>
</template>
如果'currentHero'是真实的,这将被渲染为
<hero-detail> [...] </hero-detail>
但是,如果要这样的条件输出怎么办:
<h1>Title</h1><br>
<p>text</p>
..并且您不希望将输出包装在容器中。
您可以像这样直接编写减糖版本:
<template [ngIf]="showContent">
<h1>Title</h1>
<p>text</p><br>
</template>
这将正常工作。但是,现在我们需要ngIf拥有方括号[]而不是星号*,这令人困惑(https://github.com/angular/angular.io/issues/2303)
因此,创建了一个不同的符号,如下所示:
<ng-container *ngIf="showContent"><br>
<h1>Title</h1><br>
<p>text</p><br>
</ng-container>
两种版本都会产生相同的结果(仅呈现h1和p标签)。第二个是首选,因为您可以像往常一样使用* ngIf。
<template>
不使用指令的情况有所不同。在这种情况下<template>
只会产生<!--template bindings={}-->
。