Angular-এ কাস্টম ভ্যালিডেটর একটি কাস্টম ফাংশন যা ফর্ম কন্ট্রোলের মান যাচাই করতে ব্যবহৃত হয়। আপনি যখন একটি নির্দিষ্ট শর্তের অধীনে মান যাচাই করতে চান, যেমন পাসওয়ার্ড শক্তি বা ইমেইল ঠিকানা নির্দিষ্ট ফরম্যাটে না হওয়া, তখন কাস্টম ভ্যালিডেটর খুব কার্যকরী হয়। Angular ফর্মে দুই ধরনের ভ্যালিডেটর থাকে: সিঙ্গেল ভ্যালিডেটর (যেমন required
, minLength
) এবং কাস্টম ভ্যালিডেটর।
কাস্টম ভ্যালিডেটর তৈরি করার মাধ্যমে আপনি ফর্ম কন্ট্রোলের মানের উপর নিয়ন্ত্রণ বাড়াতে পারেন।
কাস্টম ভ্যালিডেটর একটি ফাংশন হিসেবে তৈরি করা হয়, যা একটি AbstractControl
(যেমন FormControl
, FormGroup
, ইত্যাদি) ইনপুট হিসেবে গ্রহণ করে এবং একটি ValidationErrors অবজেক্ট ফেরত দেয়। যদি ভ্যালিডেশন সফল হয়, তাহলে null
ফেরত দেয়, অন্যথায় একটি ত্রুটি অবজেক্ট ফেরত দেয়।
import { AbstractControl, ValidationErrors } from '@angular/forms';
export function customValidator(control: AbstractControl): ValidationErrors | null {
// এখানে আপনার কাস্টম ভ্যালিডেশন লজিক থাকবে
if (control.value && control.value.length < 5) {
return { 'minLengthError': 'Value must be at least 5 characters long' };
}
return null; // যদি কোনো ত্রুটি না থাকে
}
এখানে, control.value
মান যাচাই করা হচ্ছে। যদি এটি 5 অক্ষরের কম হয়, তাহলে একটি ত্রুটি অবজেক্ট ফেরত দিচ্ছে। null
ফেরত দিলে মানটি ভ্যালিড হিসেবে গণ্য হবে।
কাস্টম ভ্যালিডেটরটি FormControl অথবা FormGroup-এ ব্যবহার করা হয়, যেখানে আপনি ফর্ম কন্ট্রোলের জন্য কাস্টম ভ্যালিডেশন নির্ধারণ করতে পারেন।
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { customValidator } from './custom-validator';
@Component({
selector: 'app-my-form',
template: `
<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<label for="myInput">Enter text:</label>
<input id="myInput" formControlName="myInput" />
<div *ngIf="myForm.get('myInput').hasError('minLengthError')">
Minimum length is 5 characters.
</div>
<button type="submit" [disabled]="myForm.invalid">Submit</button>
</form>
`
})
export class MyFormComponent {
myForm: FormGroup;
constructor(private fb: FormBuilder) {
this.myForm = this.fb.group({
myInput: ['', [Validators.required, customValidator]] // কাস্টম ভ্যালিডেটর ব্যবহার করা হয়েছে
});
}
onSubmit() {
if (this.myForm.valid) {
console.log('Form Submitted', this.myForm.value);
} else {
console.log('Form is invalid');
}
}
}
এখানে, myInput
নামক ফর্ম কন্ট্রোলটি required এবং customValidator ব্যবহার করে ভ্যালিডেট করা হচ্ছে। যদি ব্যবহারকারী ৫ অক্ষরের কম ইনপুট দেয়, তাহলে একটি ত্রুটি মেসেজ দেখানো হবে।
কাস্টম ভ্যালিডেটর শুধু সিঙ্ক্রোনাস নয়, আপনি অ্যাসিঙ্ক্রোনাস ভ্যালিডেটরও তৈরি করতে পারেন। অ্যাসিঙ্ক্রোনাস ভ্যালিডেটর সাধারণত যখন HTTP রিকোয়েস্টের মাধ্যমে কোনো মান যাচাই করতে হয় তখন ব্যবহার করা হয় (যেমন, ডাটাবেসে ইউজারনেমের স্বতন্ত্রতা চেক করা)।
import { AbstractControl, ValidationErrors } from '@angular/forms';
import { Observable, of } from 'rxjs';
import { debounceTime, map, switchMap } from 'rxjs/operators';
export function asyncCustomValidator(control: AbstractControl): Observable<ValidationErrors | null> {
return of(control.value).pipe(
debounceTime(300), // কিছু সময়ের জন্য অপেক্ষা করতে হবে
switchMap(value => {
// এখানে আপনি HTTP রিকোয়েস্ট ব্যবহার করতে পারেন
return value === 'existingUsername' ? of({ 'usernameTaken': true }) : of(null);
})
);
}
এই অ্যাসিঙ্ক্রোনাস ভ্যালিডেটরে, যদি ইনপুটের মান existingUsername
হয়, তাহলে একটি ত্রুটি ফেরত দেবে। অন্যথায় null
ফেরত দেবে, যা মানকে বৈধ হিসেবে গণ্য করবে।
this.myForm = this.fb.group({
username: ['', [Validators.required], [asyncCustomValidator]] // অ্যাসিঙ্ক্রোনাস ভ্যালিডেটর ব্যবহার
});
এখানে, username
ফর্ম কন্ট্রোলে asyncCustomValidator যুক্ত করা হয়েছে, যা আসন্ন ইউজারনেমের জন্য অ্যাসিঙ্ক্রোনাস ভ্যালিডেশন পরিচালনা করবে।
Angular-এ কাস্টম ভ্যালিডেটর আপনাকে আপনার অ্যাপ্লিকেশনের ফর্ম কন্ট্রোলের জন্য কাস্টম ভ্যালিডেশন লজিক তৈরি এবং প্রয়োগ করতে সাহায্য করে। আপনি সিঙ্ক্রোনাস বা অ্যাসিঙ্ক্রোনাস ভ্যালিডেটর তৈরি করতে পারেন, যা আপনাকে আপনার অ্যাপ্লিকেশনের ব্যাবহারকারীর ইনপুট যাচাই করার আরও নিয়ন্ত্রণ দেয়।
Read more