首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查ng-content是否存在

如何检查ng-content是否存在
EN

Stack Overflow用户
提问于 2016-08-01 15:10:47
回答 3查看 15K关注 0票数 33

假设我有一个简单的Bootstrap面板组件,有多个转换槽。模板示例:

代码语言:javascript
复制
<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>

我想让面板标题成为可选的。如果没有为<ng-content select="my-panel-heading"></ng-content>提供内容,如何隐藏<div class="panel-heading">元素

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-01 15:16:43

如果您有一个带有模板变量(#panelHeading)的<ng-content>父元素

代码语言:javascript
复制
<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>

然后,您可以像这样查询它

代码语言:javascript
复制
@ViewChild('panelHeading') panelHeading;

并根据是否有子级来设置属性。

代码语言:javascript
复制
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组件,那么您还可以使用

代码语言:javascript
复制
@ContentChild(MyPanelHeading) panelHeading:MyPanelHeading;

constructor(private cdRef:ChangeDetectorRef) {}

showHeading:boolean = false;

ngAfterViewInit() {
  this.showHeading = this.panelHeading != null;
  this.cdRef.detectChanges();
}
票数 29
EN

Stack Overflow用户

发布于 2017-09-30 05:17:54

你必须删除你所有的空间,但是如果你真的关心它,你可以用CSS做到这一点(ng-content不会占用空间):

代码语言:javascript
复制
.panel-heading:empty { display: none }

<div class="panel-heading"><ng-content select="my-panel-heading"></ng-content></div>
票数 26
EN

Stack Overflow用户

发布于 2021-02-05 13:48:51

执行以下操作:

代码语言:javascript
复制
<div class="panel panel-default">
  <div class="panel-heading" [hidden]="!panelHeading.hasChildNodes()" #panelHeading>
    <ng-content select="my-panel-heading"></ng-content>
  </div>
  <div class="panel-body">
    <ng-content select="my-panel-content"></ng-content>
  </div>
</div>

注意:在这种情况下,您不能使用*ngIf,以应对22条军规的情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38692881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档