假设我有一个组件它可以在模板中接受ng-content:
但是,如果没有提供ng-content内容,我想让组件显示一些默认内容作为后备。是否有一种像*ngIf这样的指令,可以测试ng-content是否为空?
假设我有一个组件它可以在模板中接受ng-content:
但是,如果没有提供ng-content内容,我想让组件显示一些默认内容作为后备。是否有一种像*ngIf这样的指令,可以测试ng-content是否为空?
@Component({
template: `
<div *ngIf="hasContent">alternative content</div>
<div #wrapper>
<ng-content></ng-content>
</div>
`
})
class MyComponent implements AfterContentInit {
@ContentChild('wrapper') wrapper:ElementRef;
hasContent = false;
ngAfterContentInit() {
this.hasContent = this.wrapper.childNodes.length > 0;
}
}
仅模板解决方案(处理SSR和内容只包含空格或换行符的情况):
<div *ngIf="!(wrapper.innerHTML||'').trim()">alternative content</div>
<div #wrapper>
<ng-content></ng-content>
</div>`
@ContentChild('wrapper') wrapper:ElementRef;
也会返回本地浏览器DOM元素) - Kamil Kiełczewski#wrapper
不包含 innerHTML
属性的情况(作为检查平台是否为浏览器的方式)- 现在这段代码是安全的,不应该破坏 SSR。@ContentChild
方法(并不差)有同样的问题,可能需要类似的解决方案。 - Kamil Kiełczewski