angular - Podmienený vstup s atribútom name vedie k hodnote undefined
Snažím sa pridať podmienku, aby som rozhodol, či mám zobraziť/skryť mybutton, ale stále dostávam chybu v konzole, že mybutton je nedefinované, keď sa vyhodnocuje mybutton.disabled
Takže, aby som otestoval, pridal som pravdivé tvrdenie, že 1===1, ale stále sa zobrazí tá istá chyba.
Prečo to robí? Aký je najjednoduchší spôsob, ako to prepísať, aby som sem mohol pridať podmienku?
<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) {
}
Odpoveď č. 1
Nižšie uvedený blok sa vykreslí pred blokom tlačidla a mybutton je tu nedefinovaný, pretože ešte nie je definovaný.
<div [ngSwitch]="item.id">
<ng-template [ngSwitchCase]="id1">
<pv-my-selector (onSaveShow)="onSaveShow(mybutton, $event)"></pv-my-selector>
</ng-template>
</div>
Navrhujem použiť ViewChild() a importovať tlačidlo do vášho komponentu:
@ViewChild('mybutton', {static: false}) mybutton;
A skontrolujte, či tlačidlo existuje, predtým než vykonáte zmeny na ňom:
onSaveShow(show: boolean) {
if (this.mybutton) {
this.mybutton.disabled = !show;
}
}
Alternatívou by bolo použiť [hidden] namiesto *ngIf.
