Tôi đang gặp khó khăn khi tìm cách đánh dấu tất cả các trường của biểu mẫu là đã chạm. Vấn đề chính là nếu tôi không chạm vào các trường và cố gắng gửi biểu mẫu - lỗi xác thực không hiển thị. Tôi có trình giữ chỗ cho đoạn mã đó trong bộ điều khiển của mình.
Ý tưởng của tôi rất đơn giản:
- người dùng nhấp vào nút gửi
- tất cả các trường đánh dấu là đã chạm
- trình định dạng lỗi chạy lại và hiển thị lỗi xác thực
Nếu ai có ý tưởng khác về cách hiển thị lỗi khi gửi mà không cần triển khai phương pháp mới - vui lòng chia sẻ chúng. Cảm ơn!
Biểu mẫu đơn giản của tôi:
<form class="form-horizontal" [formGroup]="form" (ngSubmit)="onSubmit(form.value)">
<input type="text" id="title" class="form-control" formControlName="title">
<span class="help-block" *ngIf="formErrors.title">{{ formErrors.title }}</span>
<button>Submit</button>
</form>
Và bộ điều khiển của tôi:
import {Component, OnInit} from '@angular/core';
import {FormGroup, FormBuilder, Validators} from '@angular/forms';
@Component({
selector : 'pastebin-root',
templateUrl: './app.component.html',
styleUrls : ['./app.component.css']
})
export class AppComponent implements OnInit {
form: FormGroup;
formErrors = {
'title': ''
};
validationMessages = {
'title': {
'required': 'Title is required.'
}
};
constructor(private fb: FormBuilder) {
}
ngOnInit(): void {
this.buildForm();
}
onSubmit(form: any): void {
// somehow touch all elements so onValueChanged will generate correct error messages
this.onValueChanged();
if (this.form.valid) {
console.log(form);
}
}
buildForm(): void {
this.form = this.fb.group({
'title': ['', Validators.required]
});
this.form.valueChanges
.subscribe(data => this.onValueChanged(data));
}
onValueChanged(data?: any) {
if (!this.form) {
return;
}
const form = this.form;
for (const field in this.formErrors) {
if (!this.formErrors.hasOwnProperty(field)) {
continue;
}
// clear previous error message (if any)
this.formErrors[field] = '';
const control = form.get(field);
if (control && control.touched && !control.valid) {
const messages = this.validationMessages[field];
for (const key in control.errors) {
if (!control.errors.hasOwnProperty(key)) {
continue;
}
this.formErrors[field] += messages[key] + ' ';
}
}
}
}
}
(<any>Object).values(formGroup.controls)
đểObject.keys(formGroup.controls).map(x => formGroup.controls[x])
(từ stackoverflow.com/questions/42830257/... )