1) ‹ng-template› ‹/ng-template›
Как следует из названия, ‹ng - шаблон› - это элемент шаблона, который Angular использует со структурными директивами (* ngIf, * ngFor, [ngSwitch] и пользовательские директивы). Эти элементы шаблона работают только при наличии структурных директив, которые помогают нам определить шаблон, который сам по себе ничего не отображает, а условно отображает их в DOM. Это помогает нам создавать динамические шаблоны, которые можно настраивать и настраивать.
<div> Ng-template Content <div *ngIf=”false else showNgTemplateContent”> Shouldn't be displayed </div> </div> <ng-template #showNgTemplateContent> Should be displayed </ng-template>
В приведенном выше примере, если условие ложно, мы покажем текст как «Не должно отображаться», иначе содержимое ng-template будет отображаться как «Должно отображаться».
2) ‹ng-container› ‹/ng-container›
ng-container - чрезвычайно простая директива, которая позволяет вам группировать элементы в шаблоне, который не мешает стилям или макету, поскольку Angular не помещает его в DOM.
Это полезно, если вам не нужен дополнительный div в DOM, вы можете просто использовать
ng-container. Например: если в одном div вызываются две структурные директивы, как показано ниже:
<div *ngIf="details" *ngFor="let info of details">
{{ info.content }}
</div>
Попытка скомпилировать этот код приведет к следующей ошибке:
Can't have multiple template bindings on one element. Use only one attribute prefixed with *
Одним из способов решения проблемы было бы разделение привязок, как показано ниже:
<div *ngIf="details">
<div *ngFor="let info of details">
{{ info.content }}
</div>
</div>
Или мы можем использовать ‹ng-container› без добавления каких-либо дополнительных элементов в DOM во время выполнения:
<ng-container *ngIf="details">
<div *ngFor="let info of details">
{{ info.content }}
</div>
</ng-container>
3) ‹ng-content› ‹/ng-content›
ng-content используется для проецирования содержимого в компоненты Angular. Вы используете тег ‹ng-content› ‹/ng-content› в качестве заполнителя для этого динамического содержимого, а затем, когда шаблон проанализирован, Angular заменит этот тег заполнителя вашим содержимым.
Например, у вас есть два компонента как родительский и дочерний компонент
и вы хотите показать некоторые данные в дочернем компоненте из родительского компонента.
В parent.component.html селектор ‹app-child› используется для отображения данных дочернего компонента.
<app-child>
<div> Child Component Details </div></app-child>
Если вы проверите в своем браузере ‹div› Сведения о дочернем компоненте ‹/div› внутри
‹app-child› ‹/ app- ребенок › не будет виден. Что, если мы хотим показать этот контент? Здесь на сцену выходит директива ng-content. Что нам нужно сделать, это просто добавить «ng-content» внутри шаблона компонента, и он найдет контент внутри тега директивы и добавит его в этот шаблон в том конкретном месте, где мы добавили тег «ng-content».
Поэтому вместо div вы делаете что-то подобное с компонентами Angular, за исключением случаев, когда вы указываете Angular, где его отображать в родительском шаблоне, используя ng-content.
В child.component.html:
<h1>Child Info</h1> <ng-content></ng-content>
Теперь снова зайдите в браузер. Вы увидите следующее: ‹div› Сведения о дочернем компоненте ‹/div›
‹ng - content› принимает атрибут select, который позволяет нам сортировать название нашего рекламного места, а точнее, он позволяет нам определить селектор нашего слота. Это означает «Замени меня, только если у элемента есть атрибут card-body». Затем мы изменяем представление компонента нашего приложения, чтобы включить атрибут card-body.
Например: В child.component.html:
<h1>Child Info</h1> <ng-content select="[input], [form-field]"></ng-content>
В parent.component.html:
<app-child> <h1 input>Content1!</h3> <h2 form-field>Content2!</h2> <h3 input form-field>Content1 & Content2!</h1> </app-child>
Если вы проверите свой браузер, все теги заголовков будут видны из дочернего компонента с помощью ‹ng-content›.
Подводя итог, ng-content используется для отображения дочерних элементов в шаблоне, ng-container используется как необработанный контейнер, чтобы избежать необходимости добавлять span или div, а ng-template позволяет группировать некоторый контент, который не отображается напрямую, но может использоваться в других местах вашего шаблона или вы код.
Спасибо за чтение !!!!!!!!