javascript - Validar formulário em diálogo Angular
Estou usando dialogs de material para Angular, onde eu preciso inserir um título e selecionar a variante aprovar ou rejeitar.
Aqui está o código do componente
import {Component, Inject, OnInit} from '@angular/core';
import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material";
import {FormBuilder, Validators, FormGroup} from "@angular/forms";
import { Payment } from '../payments/payment';
@Component({
selector: 'editing-dialog',
templateUrl: './editing-dialog.component.html',
styleUrls: ['./editing-dialog.component.scss']
})
export class EditingDialogComponent implements OnInit {
form: FormGroup;
reason:String;
id: Number;
statusdescription: String;
constructor(
fb: FormBuilder,
private dialogRef: MatDialogRef<EditingDialogComponent>,
@Inject(MAT_DIALOG_DATA) data:Payment) {
this.reason = data.Reason;
this.id = data.Id;
this.statusdescription = data.StatusDescription;
this.form = fb.group({
reason: [this.reason, Validators.maxLength(5)],
id: this.id,
status: status
});
}
ngOnInit() {
}
save() {
this.dialogRef.close(this.form.value);
}
close() {
this.dialogRef.close();
}
}
E aqui está o HTML deste componente
<h2>{{description}}</h2>
<mat-dialog-content [formGroup]="form">
<mat-form-field>
<input matInput required placeholder="Payment Reason" formControlName="reason" value="{{reason}}">
</mat-form-field>
<mat-radio-group formControlName="status">
<mat-radio-button value="Approved">Approved</mat-radio-button>
<mat-radio-button value="Rejected">Rejected</mat-radio-button>
</mat-radio-group>
</mat-dialog-content>
<mat-dialog-actions>
<button class="mat-raised-button" (click)="save()">
Ok
</button>
<button class="mat-raised-button"
(click)="close()">
Close
</button>
</mat-dialog-actions>
Eu preciso fazer a validação se o campo de entrada está preenchido e se um dos botões de rádio está selecionado quando eu clico no botão ok. Agora eu tenho validação obrigatória para o campo de entrada.
Como eu posso fazer isso corretamente?
Obrigado pela ajuda.
Resposta #1
quando você cria o grupo de formulário, adicione a regra obrigatória aos campos que você deseja que sejam obrigatórios, por exemplo, aqui os campos reason e status são obrigatórios:
this.form = fb.group({
reason: [this.reason, [Validators.required, Validators.maxLength(5)]],
id: this.id,
status: [status, [Validators.required]]
});
então no método save:
save() {
const {value, valid} = this.form;
if(valid){
this.dialogRef.close(value);
}
}
você pode precisar adicionar o elemento mat-error para mostrar os erros de validação no seu HTML
Resposta #2
Enquanto você está construindo o formulário
this.form = fb.group({
reason: [this.reason, [Validators.required, Validators.maxLength(5)]],
id: this.id,
status: status
});
e ao salvar
save() {
if(this.form.valid) {
this.dialogRef.close(this.form.value);
}
}
