私は次のコードを持っています:
<md2-dialog #techniciansDialog>
<md2-dialog-title color="primary">Técnicos</md2-dialog-title>
<form #technicianForm="ngForm">
<div style="display: table; width: 100%;">
<div style="display: table; width: 100%;">
<div style="vertical-align:middle; width:50%; display: table-cell;">
<md-input-container>
<input mdInput [(ngModel)]="technician.name" name="nameTechnician" type="text" placeholder="Nome" required>
</md-input-container>
</div>
</div>
<div style="vertical-align:middle; width:50%; display: table-cell;">
<md-input-container>
<input mdInput [(ngModel)]="technician.responsability" name="responsabilityTechnician" type="text"
placeholder="Responsabilidade" required>
</md-input-container>
</div>
</div>
<div style="display: table; width: 100%;">
<div style="vertical-align:middle; width:50%; display: table-cell;">
<md-input-container>
<input mdInput [(ngModel)]="technician.phone" name="phoneTechnician" type="text" placeholder="Telefone"
required>
</md-input-container>
</div>
<md-input-container>
<input mdInput [(ngModel)]="technician.email" name="emailTechnician" type="text" placeholder="Email" required>
</md-input-container>
<md-input-container>
<input mdInput [(ngModel)]="technician.password" name="passwordTechnician" type="password"
placeholder="Password" required>
</md-input-container>
</div>
</form>
<md2-dialog-footer>
<div *ngIf="!update;then content else other_content"></div>
<ng-template #content>
<button md-raised-button color="primary" [disabled]="!technicianForm.form.valid"
(click)="gravarDadosTechnician(); technicianForm.reset()">Criar
</button>
</ng-template>
<ng-template #other_content>
<button md-raised-button color="primary" [disabled]="!technicianForm.form.valid"
(click)="sendUpdateDadosTechnician(techniciansDialog); technicianForm.reset()">Atualizar
</button>
</ng-template>
<button md-raised-button color="primary" (click)="closeDialog(techniciansDialog); technicianForm.reset()">Fechar
</button>
</md2-dialog-footer>
</md2-dialog>
<md2-dialog #serviceDialog>
<md2-dialog-title color="primary">Serviços</md2-dialog-title>
<form #servicesForm="ngForm" name="servicesForm">
<div style="display: table; width: 100%;">
<div *ngIf="!update;then divcreate else divupdate"></div>
<div style="vertical-align:middle; width:50%; display: table-cell;">
<md-input-container>
<input mdInput [(ngModel)]="service.name" name="nameService" type="text" placeholder="Nome" required>
</md-input-container>
</div>
</div>
<div style="display: table; width: 100%;">
<div style="vertical-align:middle; width:50%; display: table-cell;">
<md-input-container>
<input mdInput [(ngModel)]="service.SLA" name="SLA" type="text" placeholder="SLA (HORAS)" required>
</md-input-container>
</div>
<div style="vertical-align:middle; width:50%; display: table-cell;">
<md-input-container>
<input mdInput [(ngModel)]="service.description" name="descriptionService" type="text"
placeholder="description"
required>
</md-input-container>
</div>
</div>
</form>
<md2-dialog-footer>
<div *ngIf="!update;then content else other_content"></div>
<ng-template #content>
<button md-raised-button color="primary" [disabled]="!servicesForm.form.valid"
(click)="gravarDadosServices(); servicesForm.reset()">Criar
</button>
</ng-template>
<ng-template #other_content>
<button md-raised-button color="primary" [disabled]="!servicesForm.form.valid"
(click)="sendUpdateDadosServices(serviceDialog); servicesForm.reset()">Atualizar
</button>
</ng-template>
<button md-raised-button color="primary" (click)="closeDialog(serviceDialog); servicesForm.reset()">Fechar</button>
</md2-dialog-footer>
</md2-dialog>
どちらの形式も、検証しない場合、またはどちらか一方のみを検証する場合に完全に機能します。
例:
servicesForm
は検証で問題なく機能しますが、technicianForm
に入力すると、フィールドに正しく入力しても検証されません。
technicianForm
答えられないだけで、偽のままですtechnicianForm.form.valid
だから私が離陸する場合#servicesForm
、#technicianForm
は完全に機能します。
同じページに2つ以上のフォームがあるため、これらの複数のフォームフィールドを検証するにはどうすればよいですか。
それぞれの.tsファイルでフォーム検証を行う必要がありますか?
それで、私は答えを投稿して、この質問を閉じます。いくつかのオプションがあります。
1)フォームごとに別個のコンポーネントを作成し、それらのコンポーネントを、必要なフォームのセットを含む親コンポーネントにネストできます。これにより、問題を適切に分離し、各コンポーネントを小さく保つことができます。
2)複数のフォームの目的がグループ化(個別の送信ではない)である場合は、FormGroupを使用して、関連する一連のコントロールを追跡できます。しかし、ここではそうではありません。
その他のオプションとディスカッションについては、こちらのKaraのビデオもご覧ください。 https://www.youtube.com/watch?v=MfILq1LNSUk
次のようにフォームまたはフィールドが未定義でないかどうかを確認する場合は、フォームエラー/フィールドエラーを明示的に確認することもできます。
[disabled]="technicianForm && technicianForm.form.invalid"
または、たとえば必須フィールドがあり、エラーを表示したい場合(#name = "ngModel"の入力フィールド):
<div class="col-md-12 text-danger" *ngIf="name && name.errors && name.touched">
{{ '_MY_NAME_ERROR_' | translate }}
</div>
これは、1つのコンポーネントを持つ1つのテンプレート内の複数のフォーム(#myform = "ngForm"のように作成)で機能しました。