В Angular 8 проверка диапазонов дат является общим требованием во многих приложениях. В этой статье блога мы рассмотрим различные методы проверки полей «от даты» и «по дату», гарантируя, что выбранный диапазон дат действителен. Мы предоставим примеры кода для каждого метода, что позволит вам эффективно реализовать проверку диапазона дат в ваших проектах Angular 8.
Метод 1: проверка формы на основе шаблона
Angular 8 предоставляет формы на основе шаблонов, которые позволяют нам выполнять проверку на стороне клиента с минимальным количеством кода. Мы можем использовать встроенные валидаторы Angular для проверки диапазона дат.
<form #myForm="ngForm">
<label for="fromDate">From Date:</label>
<input type="date" id="fromDate" name="fromDate" [(ngModel)]="fromDate" required>
<label for="toDate">To Date:</label>
<input type="date" id="toDate" name="toDate" [(ngModel)]="toDate" required>
<div *ngIf="myForm.invalid && (myForm.dirty || myForm.touched)">
<div *ngIf="myForm.controls.fromDate.errors?.required">From Date is required.</div>
<div *ngIf="myForm.controls.toDate.errors?.required">To Date is required.</div>
<div *ngIf="isInvalidDateRange()">Invalid date range.</div>
</div>
</form>
isInvalidDateRange(): boolean {
return this.fromDate && this.toDate && new Date(this.fromDate) > new Date(this.toDate);
}
Метод 2: реактивная проверка формы
Реактивные формы обеспечивают более гибкий и масштабируемый подход к проверке. Мы можем создавать собственные валидаторы для проверки диапазона дат.
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
// Inside component class:
myForm: FormGroup;
constructor(private formBuilder: FormBuilder) {
this.myForm = this.formBuilder.group({
fromDate: ['', Validators.required],
toDate: ['', Validators.required]
}, { validators: this.dateRangeValidator });
}
dateRangeValidator(formGroup: FormGroup): { [key: string]: any } | null {
const fromDate = formGroup.get('fromDate').value;
const toDate = formGroup.get('toDate').value;
if (fromDate && toDate && new Date(fromDate) > new Date(toDate)) {
return { 'invalidDateRange': true };
}
return null;
}
Метод 3: пользовательская директива
Другой подход — создать пользовательскую директиву, которая проверяет диапазон дат. Этот метод обеспечивает возможность повторного использования в нескольких формах вашего приложения.
import { Directive, Input } from '@angular/core';
import { NG_VALIDATORS, Validator, AbstractControl } from '@angular/forms';
@Directive({
selector: '[dateRange]',
providers: [{ provide: NG_VALIDATORS, useExisting: DateRangeValidatorDirective, multi: true }]
})
export class DateRangeValidatorDirective implements Validator {
@Input('dateRange') dateRange: DateRange;
validate(control: AbstractControl): { [key: string]: any } | null {
const fromDate = control.get('fromDate').value;
const toDate = control.get('toDate').value;
if (fromDate && toDate && new Date(fromDate) > new Date(toDate)) {
return { 'invalidDateRange': true };
}
return null;
}
}
interface DateRange {
fromDate: string;
toDate: string;
}
Проверка диапазонов дат имеет решающее значение для обеспечения целостности данных и удобства работы пользователей в приложениях Angular 8. В этой статье мы рассмотрели три различных метода проверки диапазона дат: проверка формы на основе шаблона, проверка реактивной формы и проверка настраиваемых директив. Реализуя эти методы с помощью предоставленных примеров кода, вы можете эффективно проверять диапазоны дат и обеспечивать надежный пользовательский интерфейс в своих проектах Angular 8.
Не забывайте учитывать разницу часовых поясов и учитывать все конкретные бизнес-правила, связанные с диапазонами дат в вашем приложении.