The following functions are defined in an Angular component:
handleInput(event) {
// Validate the input
if (event.target.value.length >= 8) {
this.validate(event.target.value);
}
}
// Validation logic for provider NG_VALIDATORS will
// Logic for NG_VALIDATORS provider, returns validation result to parent form
/** @internal */
validate(control) {
const value = control.value || control;
if (this.required && value.replace(/s+/g, '').length === 0) {
this.hasError = this.control.touched || this.control.dirty;
this.errorText = [{ message: this.requiredErrorMessage }];
return this.required ? { required: 'date required' } : null;
}
if (!value) {
this.hasError = false;
return null;
}
const [day, month, year] = value.split('.').map(Number);
if (day && month && year && value.length === 10) {
const date = new Date(year, month - 1, day);
const isDateValid = !isNaN(date.getTime()) && date.getFullYear() === year && date.getMonth() + 1 === month && date.getDate() === day;
this.hasError = !isDateValid || date > this.maxDate || date < this.minDate;
if (this.hasError) {
this.hasError = true;
this.errorText = [{ message: this.validationErrorMessage }];
return { invalid: 'date invalid' };
}
}
this.hasError = false;
return null;
}
This is the corresponding custom input field:
<input
#input
type="text"
mask="00.00.0000"
autocomplete="off"
(input)="handleInput($event)"
[(ngModel)]="value"
/>
The input field will add with ngx-mask a mask for a date field in DD.MM.YYYY format.
Problem:
When the component is rendered, the following error is thrown:
ERROR TypeError: value.split is not a function
For this line of code: const [day, month, year] = value.split('.').map(Number);
I already tried to fix it with
if (!value) {
this.hasError = false;
return null;
}
The error is shown when the component is rendered of if a string was entered in the input field and then the input has been deleted (empty input field).