angular - Ehdollinen syöte nimen attribuutin kanssa johtaa undefined-arvoon
Yritän lisätä ehdon päättääkseni, pitäisikö minun näyttää/piilottaa mybutton, mutta saan jatkuvasti konsolivirheen, että mybutton on määrittelemätön, kun se arvioi mybutton.disabled
Joten testatakseni lisäsin toden lausunnon, että 1===1, mutta se silti antaa saman virheen.
Miksi se tekee niin? Mikä on vähiten työläs tapa refaktoroida tämä, jotta voin lisätä ehdon tähän?
<div [ngSwitch]="item.id">
<ng-template [ngSwitchCase]="id1">
<pv-my-selector (onSaveShow)="onSaveShow(mybutton, $event)"></pv-my-selector>
</ng-template>
</div>
<button *ngIf="1===1" #mybutton mat-button (click)="saveClick(item.id)">Save</button>
onSaveShow(mybutton: any, show: boolean) {
mybutton.disabled = !show; <!-- error is here -->
}
saveClick(id: string) {
}
Vastaus #1
Alla oleva lohko renderöidään ennen painikeloakoa, ja mybutton on täällä määrittelemätön, koska sitä ei ole vielä määritelty.
<div [ngSwitch]="item.id">
<ng-template [ngSwitchCase]="id1">
<pv-my-selector (onSaveShow)="onSaveShow(mybutton, $event)"></pv-my-selector>
</ng-template>
</div>
Ehdotan käyttämään ViewChild()-funktiota ja tuomaan napin komponenttiisi:
@ViewChild('mybutton', {static: false}) mybutton;
Ja tarkista, onko painike olemassa ennen kuin teet siihen muutoksia:
onSaveShow(show: boolean) {
if (this.mybutton) {
this.mybutton.disabled = !show;
}
}
Vaihtoehto olisi käyttää [hidden] *ngIf:n sijaan.
