2017-01-24 2 views
7

zu tun Ich würde gerne Standard-Content zur Verfügung stellen, die nur erscheinen würde, wenn der Inhalt nicht übertragen wird.Ist es möglich, bedingte Content-Projektion (Transclusion) in Winkel 2+

Zum Beispiel Hier ist meine Komponentenvorlage:

<my-component> 
    <h1 header>This is my header</h1> 
    <p>This is my content</p> 
</my-component> 

Was nun, wenn ich einen Standard-Header zur Verfügung zu stellen wollte:

<article> 
    <header> 
     <ng-content select="[header]"></ng-content> 
    </header> 
    <section> 
     <ng-content></ng-content> 
    </section> 
</article> 

ich es so verwenden kann. Ist es möglich; ohne Akrobatik wie Überprüfung auf Inhalt in ngAfterContentInit?

+1

bei dieser Antwort Werfen Sie einen Blick http://stackoverflow.com/a/38692980/373655. Nicht sicher, ob eine elegantere Lösung existiert, die 'ngAfterContentInit' nicht benötigt – rob

+0

Kann man auch eine Projektion alias machen? '' – Cody

Antwort

3

Sie können dies mit reinem CSS tun! wenn der Inhalt geliefert Stellen Sie sich das folgende

<ng-content select=".header"></ng-content> 
<h1 class="default-header"> 
    This is my default header 
</h1> 

dann die folgende CSS die Header würde verstecken:

.header + .default-header { 
    display: none; 
} 

Wenn kein Kopfzugeführt wird, dann wird die Anzeige: keine Regel nicht angepasst ist .

Hinweis, werden Sie diese Inhalte Verkapselung deaktivieren verwenden müssen: encapsulation: ViewEncapsulation.None

+2

Clever, ich denke aus irgendeinem Grund nicht an Geschwister-Selektoren. (Vielleicht bin ich zu alt?) – dovidweisz

Verwandte Themen