<ng-container>
для спасения
Angular <ng-container>
- это группирующий элемент, который не мешает стилям или макету, потому что Angular не помещает его в DOM.
(...)
Элемент <ng-container>
синтаксиса, распознаваемый анализатором Angular. Это не директива, компонент, класс или интерфейс. Это больше похоже на фигурные скобки в JavaScript-блоке if:
if (someCondition) {
statement1;
statement2;
statement3;
}
Без этих скобок JavaScript будет выполнять первый оператор только тогда, когда вы намереваетесь выполнить их все условно как один блок. В <ng-container>
удовлетворяет аналогичная потребность в угловых шаблонов.
Оригинальный ответ:
Согласно этому запросу :
<ng-container>
является логическим контейнером, который может использоваться для группировки узлов, но не отображается в дереве DOM как узел.
<ng-container>
отображается как комментарий HTML.
Итак, этот угловой шаблон:
<div>
<ng-container>foo</ng-container>
<div>
будет производить такой вид продукции:
<div>
<!--template bindings={}-->foo
<div>
Поэтому ng-container
полезно , когда вы хотите conditionaly присоединять группу элементов (т.е. использования *ngIf="foo"
) в вашем приложении , но не хотите , чтобы обернуть их с другим элементом .
<div>
<ng-container *ngIf="true">
<h2>Title</h2>
<div>Content</div>
</ng-container>
</div>
будет затем производить:
<div>
<h2>Title</h2>
<div>Content</div>
</div>
<template>
когда он используется без директив.<template>
будет просто производить<!--template bindings={}-->
в этом случае.<template></template>
будет производить<script></script>
увидеть это<script>
во время компиляции она есть, она удаляется впоследствии, в DOM нет лишних тегов. Я считаю, что руководство содержит устаревшую информацию или просто ошибочно. В любом случае, спасибо за указание основного различия между <ng-container> и <template>.<script></script>
. Это давало что-то вроде<!--template bindings={}-->
довольно долгое время. Документы будут исправлены в ближайшее время.Документация ( https://angular.io/guide/template-syntax#!#star-template ) дает следующий пример. Скажем, у нас есть шаблон кода, подобный этому:
До того, как оно будет обработано, оно будет "обезвожено". То есть запись в виде звёздочки будет транскрибирована в запись:
Если 'currentHero' является правдивым, это будет отображаться как
Но что, если вы хотите условный вывод, подобный этому:
.. и вы не хотите, чтобы вывод был упакован в контейнер.
Вы можете написать версию без сахара непосредственно так:
И это будет работать нормально. Однако теперь нам нужно, чтобы в ngIf вместо звездочки * были скобки [], и это сбивает с толку ( https://github.com/angular/angular.io/issues/2303 )
По этой причине была создана другая запись, например:
Обе версии будут давать одинаковые результаты (будут отображаться только теги h1 и p). Второй вариант предпочтительнее, потому что вы можете использовать * ngIf, как всегда.
источник
ng-container
появилась директивная идея , спасибо :)Примеры использования Imo для
ng-container
- это простые замены, для которых пользовательский шаблон / компонент будет излишним. В документе API они упоминают следующееи я думаю, что это все: группировка.
Имейте в виду, что
ng-container
директива отпадает вместо шаблона, где ее директива оборачивает фактическое содержимое.источник
Вариант использования для этого, когда вы хотите использовать таблицу с * ngIf и * ngFor - поскольку помещение элемента div в td / th приведет к неправильному поведению элемента таблицы -. Я столкнулся с этой проблемой, и это был ответ.
источник
<template [ngIf]...>
. Вопрос заключался в разнице между этими двумя подходами.