Angular-এ অ্যাসিঙ্ক পাইপ (Async Pipe) হলো একটি বিশেষ পাইপ যা Observables বা Promises এর মানকে অ্যাসিঙ্ক্রোনাসভাবে হ্যান্ডল করতে ব্যবহৃত হয়। এটি একটি অদ্ভুত ও শক্তিশালী টুল যা ডেটাকে অ্যাসিঙ্ক্রোনাসভাবে সাবস্ক্রাইব করে এবং ডেটা পরিবর্তিত হলে তা স্বয়ংক্রিয়ভাবে কম্পোনেন্টের ভিউতে রেন্ডার করে। সাধারণত, অ্যাসিঙ্ক পাইপ ব্যবহৃত হয় যখন ডেটা ফেচিং বা অ্যাসিঙ্ক্রোনাস অপারেশন যেমন HTTP কল বা টাইমার থেকে আসছে।
ধরা যাক, একটি অ্যাসিঙ্ক্রোনাস HTTP রিকোয়েস্ট রয়েছে যা কিছু ডেটা ফেচ করে, এবং সেই ডেটা Angular টেমপ্লেটে দেখাতে চান।
কম্পোনেন্ট (TypeScript):
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Component({
selector: 'app-user',
templateUrl: './user.component.html'
})
export class UserComponent implements OnInit {
users$: Observable<any>;
constructor(private http: HttpClient) { }
ngOnInit() {
this.users$ = this.http.get<any>('https://jsonplaceholder.typicode.com/users');
}
}
এখানে, users$
একটি Observable যা HTTP কলের মাধ্যমে ব্যবহারকারীদের ডেটা ফেচ করবে।
টেমপ্লেট (HTML):
<ul>
<li *ngFor="let user of users$ | async">
{{ user.name }}
</li>
</ul>
এখানে, users$
একটি Observable যা async
পাইপ দ্বারা সাবস্ক্রাইব করা হচ্ছে। যখনই users$
-এর মান পরিবর্তিত হবে (যেমন HTTP কলের রেসপন্স আসবে), Angular স্বয়ংক্রিয়ভাবে DOM-এ পরিবর্তনগুলি রেন্ডার করবে। আপনি ম্যানুয়ালি .subscribe()
বা .unsubscribe()
করার প্রয়োজন পড়বে না।
অ্যাসিঙ্ক পাইপ শুধুমাত্র Observables-এ কাজ করে না, এটি Promises থেকেও ডেটা সাবস্ক্রাইব করে। এটি তখন ব্যবহৃত হতে পারে যখন আপনি কোনো অ্যাসিঙ্ক্রোনাস অপারেশন (যেমন একটি HTTP কল যা Promise রিটার্ন করে) থেকে ডেটা পেতে চান।
কম্পোনেন্ট (TypeScript):
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-user',
templateUrl: './user.component.html'
})
export class UserComponent implements OnInit {
userPromise: Promise<any>;
ngOnInit() {
this.userPromise = this.fetchUser();
}
fetchUser(): Promise<any> {
return new Promise(resolve => {
setTimeout(() => {
resolve({ name: 'John Doe', age: 30 });
}, 2000);
});
}
}
টেমপ্লেট (HTML):
<div *ngIf="userPromise | async as user; else loading">
<p>Name: {{ user.name }}</p>
<p>Age: {{ user.age }}</p>
</div>
<ng-template #loading>
<p>Loading...</p>
</ng-template>
এখানে, userPromise
একটি Promise, এবং async
পাইপের মাধ্যমে এটি সাবস্ক্রাইব করা হচ্ছে। যেহেতু Promise টা অ্যাসিঙ্ক্রোনাস, তাই Angular নিজে এটি অ্যাসিঙ্ক্রোনাসভাবে রেন্ডার করবে এবং রেসপন্স আসলে user
ডেটা টেমপ্লেটে দেখাবে।
.subscribe()
এবং .unsubscribe()
করার প্রয়োজন নেই।অ্যাসিঙ্ক পাইপ Angular অ্যাপ্লিকেশনের জন্য একটি অত্যন্ত কার্যকর টুল, যা অ্যাসিঙ্ক্রোনাস ডেটার সাবস্ক্রিপশন এবং রেন্ডারিং প্রক্রিয়া সহজ করে দেয়। এটি কম্পোনেন্টের ভিউতে অ্যাসিঙ্ক্রোনাস ডেটা নিরাপদে এবং দক্ষতার সাথে প্রদর্শন করতে সহায়তা করে, এবং Angular নিজেই সাবস্ক্রিপশন এবং আনসাবস্ক্রিপশন হ্যান্ডল করে, ফলে কোড পরিষ্কার এবং মেইন্টেনেবল হয়।
Read more