Saya telah menerapkan solusi dengan menggunakan dekorator @ContentChildren , yang entah bagaimana mirip dengan jawaban @ Lerner.
Menurut dokumen , dekorator ini:
Dapatkan QueryList elemen atau arahan dari DOM konten. Setiap kali elemen turunan ditambahkan, dihapus, atau dipindahkan, daftar kueri akan diperbarui, dan perubahan yang dapat diamati dari daftar kueri akan mengeluarkan nilai baru.
Jadi kode yang diperlukan dalam komponen induk adalah:
<app-my-component>
<div #myComponentContent>
This is my component content
</div>
</app-my-component>
Di kelas komponen:
@ContentChildren('myComponentContent') content: QueryList<ElementRef>;
Kemudian, di template komponen:
<div class="container">
<ng-content></ng-content>
<span *ngIf="*ngIf="!content.length""><em>Display this if ng-content is empty!</em></span>
</div>
Contoh lengkap : https://stackblitz.com/edit/angular-jjjdqb
Saya telah menemukan solusi ini diimplementasikan dalam komponen sudut, untuk matSuffix
, dalam komponen bidang formulir .
Dalam situasi ketika konten komponen dimasukkan nanti, setelah aplikasi diinisialisasi, kita juga dapat menggunakan implementasi reaktif, dengan berlangganan ke changes
peristiwa 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();
}
}
Contoh lengkap : https://stackblitz.com/edit/angular-essvnq