Angular-Loiane-Training

Este repositorio contem exemplos documentados e descricoes dos conteudos estudados ao longo do curso de Angular da Loiane

View project on GitHub

ng-content

Uma forma de passar conteudo para o interior de um component e por meio de input property, entretanto quando o tamanho desse conteudo e maior exite uma forma mais conveniente, por meio da diretiva ng-content. Para este exemplo iremos utilizar um painel disponivel no bootstap 3 para exemplificar um cenario onde queremos passar um titulo e um corpo para o component. OBS: as informacoes passadas ao compoenet sao pequenas apenas para exemplo.

Inicialmente temos um exemplo no qual os conteudos do titulo e o conteudo do painel estao inseridos de forma direta (hard coded).

  <div class="panel panel-default">
    <div class="panel-heading">
      <h3 class="panel-title">Titulo do Painel</h3>
    </div>
    <div class="panel-body">
      Conteudo para ser exibito no corpo
    </div>
  </div>

para tornar os conteudos variaveis vamos utilizar a diretiva ng content.

<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title">Titulo do Painel</h3>
    </div>
    <div class="panel-body">
        <ng-content></ng-content>
    </div>
</div>

Deste modo ao declarar o component em outro template basta declarar seu conteuto entre as tags seletoras.

<app-ng-content-exemplo>
    Conteudo para ser exibito no corpo
</app-ng-content-exemplo>

tambem e possivel passar outros components entre as tags seletoras, utilizando o elvis operator component como exemplo.

<app-ng-content-exemplo>
    Conteudo para ser exibito no corpo
    <app-elvis-operator></app-elvis-operator>
</app-ng-content-exemplo>

Para casos onde sao necessario a passagem de mais de um conteudo, e possivel utilizar seletores para identificar para qual diretiva ng-content o conteudo se destina.

<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title">
            <ng-content select=".titulo"></ng-content>
        </h3>
    </div>
    <div class="panel-body">
        <ng-content select=".corpo"></ng-content>
    </div>
</div>

e para passagem do conteuto basta separar utilizando a tag div com a class relativa ao select do ng-content

<app-ng-content-exemplo>
    <div class="titulo">
        Titulo do painel
    </div>
    <div class="corpo">
        Conteudo para ser exibito no corpo
        <app-elvis-operator></app-elvis-operator>
    </div>
</app-ng-content-exemplo>