<ng-container>
para o resgate
O Angular <ng-container>
é um elemento de agrupamento que não interfere nos estilos ou no layout, porque o Angular não o coloca no DOM.
(...)
O <ng-container>
é um elemento de sintaxe reconhecido pelo analisador Angular. Não é uma diretiva, componente, classe ou interface. É mais como as chaves em um bloco if do JavaScript:
if (someCondition) {
statement1;
statement2;
statement3;
}
Sem essas chaves, o JavaScript só executaria a primeira instrução quando você pretender executar todas elas condicionalmente como um único bloco. Os <ng-container>
satisfaz uma necessidade semelhante em modelos angular.
Resposta original:
De acordo com esta solicitação de recebimento :
<ng-container>
é um contêiner lógico que pode ser usado para agrupar nós, mas não é renderizado na árvore DOM como um nó.
<ng-container>
é renderizado como um comentário HTML.
então este modelo angular:
<div>
<ng-container>foo</ng-container>
<div>
produzirá este tipo de saída:
<div>
<!--template bindings={}-->foo
<div>
Portanto, ng-container
é útil quando você deseja anexar condicionalmente um grupo de elementos (ou seja, usar *ngIf="foo"
) em seu aplicativo, mas não deseja agrupá-los com outro elemento .
<div>
<ng-container *ngIf="true">
<h2>Title</h2>
<div>Content</div>
</ng-container>
</div>
irá então produzir:
<div>
<h2>Title</h2>
<div>Content</div>
</div>
<template>
quando é usado sem diretivas.<template>
apenas produziria<!--template bindings={}-->
neste caso.<template></template>
vai produzir<script></script>
ver isso<script>
durante a compilação, ela é removida posteriormente, não há tags extras no DOM. Acredito que o manual contém informações obsoletas ou está errado nisso. De qualquer forma, obrigado por apontar a principal diferença entre <ng-container> e <template>.<script></script>
. Ele está renderizando algo como<!--template bindings={}-->
por um bom tempo. Os documentos serão corrigidos em breve.A documentação ( https://angular.io/guide/template-syntax#!#star-template ) fornece o seguinte exemplo. Digamos que temos um código de modelo como este:
Antes de ser processado, será "sem açúcar". Ou seja, a notação asterix será transcrita para a notação:
Se 'currentHero' for verdade, isso será renderizado como
Mas e se você quiser uma saída condicional como esta:
.. e você não deseja que a saída seja embrulhada em um contêiner.
Você pode escrever a versão sem açúcar diretamente assim:
E isso vai funcionar bem. No entanto, agora precisamos que ngIf tenha colchetes [] em vez de um asterisco *, e isso é confuso ( https://github.com/angular/angular.io/issues/2303 )
Por esse motivo, uma notação diferente foi criada, assim:
Ambas as versões produzirão os mesmos resultados (somente a tag h1 ep será renderizada). O segundo é o preferido, porque você pode usar * ngIf como sempre.
fonte
ng-container
ideia directiva veio , graças :)Os casos de uso do Imo
ng-container
são substituições simples para as quais um modelo / componente personalizado seria um exagero. No documento da API, eles mencionam o seguintee acho que é disso que se trata: agrupar coisas.
Esteja ciente de que a
ng-container
diretiva desaparece em vez de um modelo em que sua diretiva agrupa o conteúdo real.fonte
Um caso de uso para isso quando você deseja usar uma tabela com * ngIf e * ngFor - Como colocar uma div em td / th fará com que o elemento da tabela se comporte mal -. Eu enfrentei esse problema e essa foi a resposta.
fonte
<template [ngIf]...>
. A questão era a diferença entre essas duas abordagens.