typescript - Hur man får komponentklass från en native elementreferens i Angular
Jag har ett HTML Div-element med angular-komponentbarn inne i div:en. På något sätt ser angular-mallen ut så här.
<mat-radio-group [(ngModel)]="selectedRadioValue">
<div
#radioButtonDiv
*ngFor="let opt of getInputPayload(); index as optIndex"
>
<mat-radio-button [value]="opt">
{{ opt.label }}
</mat-radio-button>
<ng-container *ngIf="someCondition === true">
<app-my-component [attr]="opt.foo"></app-my-component>
</ng-container>
</div>
</mat-radio-group>
Jag fick referensen till det yttre div-elementet med @ViewChildren
@ViewChildren('radioButtonDiv') radioButtonDiv: QueryList<ElementRef<HTMLDivElement>>;
Hur får jag åtkomst till <app-my-component>-komponentklassen inuti radioButtonDiv QueryList?
Jag försökte använda querySelector() från den yttre div:ens nativeElement.
this.radioButtonDiv.forEach((rbd, index) => {
if (index === findIndex) {
// Ignore the setTimeout.
setTimeout(() => {
const findChild = rbd.nativeElement.querySelector('app-formulir-medis-attribute');
}, 500);
}
});
Dock visar findChild-resultatet i ovanstående kod nativeElement för <my-component>-komponenten och inte Angular-komponenten, därför kunde jag inte komma åt dess attribut och egenskaper. Hur får jag MyComponent-klassen från elementreferensen ovan?
Tack!
Svar #1
Du kan använda ContentChild eller ng-content-taggen. Här är ett Stackblitz-exempel.
Svar #2
För att få åtkomst till <app-my-component>-komponentklassen istället för DOM-elementet kan du använda @ViewChildren med komponentklassen som selektor.
Så, om komponentklassen är MyComponent, skulle det se ut så här:
@ViewChildren(MyComponent) myComponents!: QueryList<MyComponent>;
Här är en StackBlitz som visar detta tillvägagångssätt.
