Zote mbili zinatafuta vielezi vya vipengele/sehemu ndogo, lakini zinaangalia mahali tofauti: @ViewChild inatafuta katika kiolezo chake cha sehemu, ilhali inatafuta maudhui ya sehemu kupitia .
Zote mbili zinatafuta vielezi vya vipengele/sehemu ndogo, lakini zinaangalia mahali tofauti: @ViewChild inatafuta katika kiolezo chake cha sehemu, ilhali inatafuta maudhui ya sehemu kupitia .
@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 inakufikia vipengele/sehemu ambazo sehemu yenyewe inadhani katika kiolezo chake — inayopatikana katika 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 inakufikia maudhui ambayo mzazi alipeana (yaliyoonyeshwa kupitia <ng-content>) — inayopatikana katika 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)
Kutofautiana @ViewChild (kiolezo chako) na @ContentChild (maudhui yaliyoonyeshwa) — na muda wao wa mzunguko wa maisha (ngAfterViewInit dhidi ya ngAfterContentInit) — ni muhimu wakati wa kujenga sehemu zinazoweza kutumiwa tena ambazo zinahitaji kuingiliana na vipengele vyake vya kiolezo au maudhui ambayo wanatumia wanapakua ndani yao.
Ni hatua ya kawaida ya kuchanganyikiwa na haja ya kawaida wakati wa kuandaa maktaba za sehemu, kichwa, vidhibiti vya fomu, na vito ambavyo lazima viandamane na vipengele ndogo.