Как проверить, существует ли ng-контент
Предположим, у меня есть простой компонент загрузочный панель с несколькими слотами передача. Пример шаблона:
<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>
Я хочу сделать заголовок панели необязательным. Как мне спрятаться?--1--> элемент, если нет содержимого для <ng-content select="my-panel-heading"></ng-content>
2 ответов
если у вас есть родительский элемент <ng-content>
с переменной шаблона (#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>
тогда вы можете запросить его, как
@ViewChild('panelHeading') panelHeading;
и установить свойство в зависимости от того, есть дети или нет
constructor(private cdRef:ChangeDetectorRef) {}
showHeading:boolean = false;
ngAfterViewInit() {
this.showHeading = this.panelHeading.nativeElement && this.panelHeading.nativeElement.children.length > 0;
this.cdRef.detectChanges();
}
если <my-panel-heading>
является компонентом Angular2, то вы также можете использовать
@ContentChild(MyPanelHeading) panelHeading:MyPanelHeading;
constructor(private cdRef:ChangeDetectorRef) {}
showHeading:boolean = false;
ngAfterViewInit() {
this.showHeading = this.panelHeading != null;
this.cdRef.detectChanges();
}
вам придется удалить все ваши пробелы, но вы можете сделать это с помощью CSS, если вы действительно заботились об этом (ng-content не занимает места):
.panel-heading:empty { display: none }
<div class="panel-heading"><ng-content select="my-panel-heading"></ng-content></div>