【发布时间】:2016-02-29 18:19:36
【问题描述】:
假设我有一个组件:
@Component({
selector: 'foo',
template: '<div>foo</div>'
})
export class Foo {}
我在另一个组件中使用它:
<foo>
<h1>some inner HTML</h1>
</foo>
我怎样才能知道Foo在light DOM中是否有任何子元素?
我想联系<h1>some inner HTML</h1>。
选项 1 - @ContentChildren():这不能用于查询任意元素;目前只能通过这种方式查询 Angular 2 组件或变量 (#foo)。如果可以避免的话,我不想将变量附加到内部元素。
选项 2 - elementRef.nativeElement:我可以将 ElementRef 注入到 Foo 组件中,但是当组件实例化(在构造函数中)时,内部元素已经被删除,它将为空。在生命周期的后期(例如ngAfterViewInit()),内部元素将只是影子DOM(即<div>foo</div>)。
我还缺少其他方法吗?
用例
为了说明我为什么要这样做,我正在创建一个库组件,它有一个默认模板,如果用户决定,可以用自定义模板替换它。所以我的默认模板如下所示:
<div *ngIf="hasTemplate"><ng-content></ng-content></div>
<div *ngIf="!hasTemplate"><!-- the default template --></div>
如果<foo>..</foo> 标签内有HTML,我需要一些方法将hasTemplate 设置为true。
【问题讨论】:
标签: typescript angular