@ContentChildren 을 사용하여 솔루션을 구현했습니다. 데코레이터 의 답변과 유사합니다.
문서 에 따르면 이 데코레이터는 다음과 같습니다.
콘텐츠 DOM에서 요소 또는 지시문의 QueryList를 가져옵니다. 자식 요소가 추가, 제거 또는 이동할 때마다 쿼리 목록이 업데이트되고 쿼리 목록에서 관찰 가능한 변경 사항이 새 값을 생성합니다.
따라서 상위 구성 요소에 필요한 코드는 다음과 같습니다.
<app-my-component>
<div #myComponentContent>
This is my component content
</div>
</app-my-component>
구성 요소 클래스에서 :
@ContentChildren('myComponentContent') content: QueryList<ElementRef>;
그런 다음 구성 요소 템플릿에서 :
<div class="container">
<ng-content></ng-content>
<span *ngIf="*ngIf="!content.length""><em>Display this if ng-content is empty!</em></span>
</div>
전체 예 : https://stackblitz.com/edit/angular-jjjdqb
이 솔루션 matSuffix
은 양식 필드 에서 각도 구성 요소에 구현 된 것을 발견했습니다. 구성 요소 .
나중에 컴포넌트의 콘텐츠가 주입되는 상황 에서 앱이 초기화 된 후 다음 changes
이벤트를 구독하여 리 액티브 구현을 사용할 수도 있습니다 QueryList
.
export class MyComponentComponent implements AfterContentInit, OnDestroy {
private _subscription: Subscription;
public hasContent: boolean;
@ContentChildren('myComponentContent') content: QueryList<ElementRef>;
constructor() {}
ngAfterContentInit(): void {
this.hasContent = (this.content.length > 0);
this._subscription = this.content.changes.subscribe(() => {
this.hasContent = (this.content.length > 0);
});
}
ngOnDestroy() {
this._subscription.unsubscribe();
}
}
전체 예 : https://stackblitz.com/edit/angular-essvnq