Документация ( 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={}-->
в этом случае.