page change angular transclusion

angular - change - Cómo comprobar si existe ng-content



meta tags angular 6 (2)

Si tiene un elemento principal de <ng-content> con una variable de plantilla ( #panelHeading )

<div class="panel panel-default"> <div class="panel-heading" #panelHeading [hidden]="!showHeading"> <ng-content select="my-panel-heading"></ng-content> </div> <div class="panel-body"> <ng-content select="my-panel-content"></ng-content> </div> </div>

entonces puedes consultarla como

@ViewChild(''panelHeading'') panelHeading;

y establecer una propiedad dependiendo de si hay niños o no

constructor(private cdRef:ChangeDetectorRef) {} showHeading:boolean = false; ngAfterViewInit() { this.showHeading = this.panelHeading.nativeElement && this.panelHeading.nativeElement.children.length > 0; this.cdRef.detectChanges(); }

Si <my-panel-heading> es un componente Angular2, entonces también puede usar

@ContentChild(MyPanelHeading) panelHeading:MyPanelHeading; constructor(private cdRef:ChangeDetectorRef) {} showHeading:boolean = false; ngAfterViewInit() { this.showHeading = this.panelHeading != null; this.cdRef.detectChanges(); }

Supongamos que tengo un componente simple del panel Bootstrap con múltiples ranuras de transclusión. Ejemplo de plantilla:

<div class="panel panel-default"> <div class="panel-heading"> <ng-content select="my-panel-heading"></ng-content> </div> <div class="panel-body"> <ng-content select="my-panel-content"></ng-content> </div> </div>

Quiero hacer panel-título opcional. ¿Cómo oculto el elemento <div class="panel-heading"> , si no hay contenido proporcionado para <ng-content select="my-panel-heading"></ng-content>


Tendrías que eliminar todos tus espacios pero podrías hacer esto con CSS si realmente te importara (ng-content no ocupa espacio):

.panel-heading:empty { display: none } <div class="panel-heading"><ng-content select="my-panel-heading"></ng-content></div>