web-dev-qa-db-fra.com

Rendre le contenu entre les balises du composant

Lorsqu'un composant est rendu, le contenu qu'il contient est ignoré, par exemple:

import { Component } from '@angular/core';
@Component({
  selector: 'app-root',
  template: '<div>{{title}}</div>',
})
export class AppComponent {
  title = 'app works!';
}

En l'utilisant comme:

<app-root>Ignored content</app-root>

Renders:

<div>app works!</div>

Mais en regardant la boîte de dialogue PrimeNg, ils utilisent des composants comme celui-ci:

<p-dialog [(visible)]="display">
    <p-header>
        Header content here
    </p-header>
    Content
    <p-footer>
        Footer content here
   </p-footer>
</p-dialog>

Comme Header content here, Content et Footer content here sont dans le composant, pourquoi ne sont-ils pas ignorés et comment puis-je y parvenir?

31
LeagueOfJava

Ajouter <ng-content></ng-content> au modèle du composant où le contenu doit être projeté:

@Component({
  selector: 'app-root',
  template: '<div>{{title}}</div>
             <br>
             <ng-content></ng-content>',
})
export class AppComponent {
  title = 'app works!';
}

Contenu à projeter:

<app-root>This is projected content!</app-root>

La sortie sera:

app works!
This is projected content!

Voici un excellent article sur Angular Projection de contenu (Angular 1 Transclusion)): Transclusion in Angular 2 avec ng-content

75
Seid Mehmedovic