Loro loro njaluk referensi kanggo elemen/komponen anak, nanging ndeleng ing papan beda: @ViewChild njaluk template dhewe* komponen, sementara njaluk konten komponen liwat .
@ContentChild<ng-content>@Component({
template: `
<input #nameInput /> <!-- a template reference in MY template -->
<app-child></app-child>
`,
})
export class ParentComponent implements AfterViewInit {
@ViewChild("nameInput") input!: ElementRef; // by template ref
@ViewChild(ChildComponent) child!: ChildComponent; // by component type
ngAfterViewInit() {
this.input.nativeElement.focus(); // available after the VIEW initializes
this.child.doSomething(); // call a child component's method
}
}
@ViewChild ngakses elemen/komponen sing komponen iku dhewe nyatakake ing templatene — kasedhiyakake ing ngAfterViewInit.
@Component({
selector: "app-card",
template: `<div class="card"><ng-content></ng-content></div>`, // content projected here
})
export class CardComponent implements AfterContentInit {
@ContentChild(CardTitleComponent) title!: CardTitleComponent;
ngAfterContentInit() {
// the projected content is ready here (EARLIER than ngAfterViewInit)
console.log(this.title);
}
}
<!-- parent projects content INTO app-card -->
<app-card>
<app-card-title>Hello</app-card-title> <!-- this is what ContentChild finds -->
</app-card>
@ContentChild ngakses konten sing wong tuwane ngirim (diproyeksian liwat <ng-content>) — kasedhiyakake ing ngAfterContentInit.
@ViewChild → elements in THIS component's own template → ngAfterViewInit
@ContentChild → elements PROJECTED in from the parent → ngAfterContentInit
(plural: @ViewChildren / @ContentChildren return a QueryList of all matches)
@ViewChildren(ItemComponent) items!: QueryList<ItemComponent>; // all matching items
ngAfterViewInit() { this.items.forEach(i => ...); this.items.changes.subscribe(...); }
input = viewChild<ElementRef>("nameInput"); // signal-based query (newer Angular)
Membedakake @ViewChild (template dhewe) saka @ContentChild (konten sing diproyeksian) — lan wektu siklus urip masing-masing (ngAfterViewInit vs ngAfterContentInit) — penting nalika mbangun komponen sing bisa digunakake maneh sing kudu interaksi karo elemen template dhewe utawa konten sing dikonsumen proyekake menyang komponen.
Iki minangka titik gumbreg sing umum lan kabutuhan sing asring ana nalika ngarang pustaka komponen, tab, kontrol formulir, lan pembungkus sing kudu koordinasi karo elemen anak.