Angular একটি Component-Based Framework যা বিভিন্ন অংশের সমন্বয়ে তৈরি। এই স্থাপত্য অ্যাপ্লিকেশনকে মডুলার, স্কেলেবল এবং পুনঃব্যবহারযোগ্য করে তোলে। Angular এর প্রতিটি অ্যাপ্লিকেশন মূলত Modules, Components, Templates, Directives, Services, এবং Dependency Injection এর উপর ভিত্তি করে কাজ করে।
*ngIf
, *ngFor
)।[ngClass]
, [ngStyle]
)।date
pipe), টেক্সট রূপান্তর (uppercase
pipe) ইত্যাদি।User Interface (UI)
↓
Component ↔ Template ↔ Data Binding
↓
Services ↔ Dependency Injection
↓
Modules ↔ Routing ↔ Directives
Angular এর স্থাপত্য অ্যাপ্লিকেশনকে গঠনমূলক এবং মডুলার করে, যা ডেভেলপমেন্ট এবং রক্ষণাবেক্ষণ সহজ করে। এটি বড় এবং জটিল প্রজেক্টেও অত্যন্ত কার্যকর।
Angular-এ কম্পোনেন্ট হলো একটি মৌলিক বিল্ডিং ব্লক যা অ্যাপ্লিকেশনের UI (User Interface) নির্ধারণ করে। প্রতিটি Angular অ্যাপ্লিকেশন এক বা একাধিক কম্পোনেন্টের সমন্বয়ে গঠিত। কম্পোনেন্ট একটি TypeScript ক্লাস, HTML টেমপ্লেট, এবং CSS স্টাইলশীট নিয়ে কাজ করে।
একটি কম্পোনেন্ট তিনটি অংশ নিয়ে গঠিত:
Angular CLI ব্যবহার করে কম্পোনেন্ট তৈরি করা খুব সহজ। নিচে ধাপগুলো উল্লেখ করা হলো:
Angular CLI ব্যবহার করে নতুন কম্পোনেন্ট তৈরি করতে:
ng generate component component-name
অথবা সংক্ষেপে:
ng g c component-name
এটি একটি নতুন ফোল্ডার তৈরি করবে, যেখানে নিচের ফাইলগুলো থাকবে:
component-name.component.ts
(TypeScript ক্লাস)component-name.component.html
(HTML টেমপ্লেট)component-name.component.css
(স্টাইলশীট)component-name.component.spec.ts
(টেস্ট ফাইল)// component-name.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-component-name', // HTML ট্যাগের নাম
templateUrl: './component-name.component.html', // HTML টেমপ্লেট
styleUrls: ['./component-name.component.css'] // স্টাইল ফাইল
})
export class ComponentNameComponent {
title: string = 'Hello, Angular Component!';
}
তৈরি হওয়া কম্পোনেন্ট ব্যবহার করতে চাইলে এটি app.module.ts
ফাইলে ডিক্লেয়ার করতে হবে:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { ComponentNameComponent } from './component-name/component-name.component';
@NgModule({
declarations: [
AppComponent,
ComponentNameComponent // নতুন কম্পোনেন্ট ডিক্লেয়ার
],
imports: [BrowserModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
এরপর, কম্পোনেন্টটি HTML ট্যাগ হিসেবে ব্যবহার করতে পারবেন:
<app-component-name></app-component-name>
selector
হলো HTML ট্যাগ, যা ব্যবহার করে কম্পোনেন্টকে অ্যাপ্লিকেশনে যোগ করা হয়।<app-component-name></app-component-name>
template
অথবা templateUrl
দ্বারা কম্পোনেন্টের HTML নির্ধারণ করা হয়।উদাহরণ:
@Component({
template: '<h1>Inline Template</h1>'
})
styleUrls
বা styles
দ্বারা কম্পোনেন্টের স্টাইল নির্ধারণ করা হয়।উদাহরণ:
@Component({
styles: ['h1 { color: blue; }']
})
Angular কম্পোনেন্টে বিভিন্ন লাইফসাইকেল হুক থাকে, যেমন:
ngOnInit()
: কম্পোনেন্ট লোড হওয়ার পরপরই চালু হয়।ngOnDestroy()
: কম্পোনেন্ট ধ্বংস হওয়ার আগে চালু হয়।ngDoCheck()
: পরিবর্তন শনাক্ত করার জন্য।Angular কম্পোনেন্টে ডেটা এবং UI এর মধ্যে One-way এবং Two-way Binding করা যায়:
// hello-world.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-hello-world',
template: `<h1>{{ message }}</h1>`,
styles: [`h1 { color: green; }`]
})
export class HelloWorldComponent {
message: string = 'Welcome to Angular!';
}
HTML এ এটি ব্যবহার:
<app-hello-world></app-hello-world>
Angular কম্পোনেন্ট অ্যাপ্লিকেশন তৈরিতে একটি কেন্দ্রীয় ভূমিকা পালন করে। এটি কোড পুনরায় ব্যবহারযোগ্য, মডুলার এবং সহজে মেইনটেনযোগ্য করে তোলে।
Angular-এ NgModules হলো একটি ফ্রেমওয়ার্ক কাঠামো, যা অ্যাপ্লিকেশনের বিভিন্ন ফিচার এবং ফাংশনালিটি সংগঠিত এবং ম্যানেজ করার জন্য ব্যবহৃত হয়। প্রতিটি Angular অ্যাপ্লিকেশন একটি বা একাধিক NgModules-এ বিভক্ত।
প্রাথমিকভাবে, একটি Angular অ্যাপ্লিকেশন সর্বদা AppModule নামে একটি মূল মডিউল নিয়ে শুরু হয়।
NgModule হলো একটি ডেকোরেটর যা একটি ক্লাসকে মডিউল হিসেবে চিহ্নিত করে। এটি Angular অ্যাপ্লিকেশনের কম্পোনেন্ট, ডাইরেক্টিভ, পাইপ, সার্ভিস, এবং অন্যান্য ফিচারগুলিকে সংগঠিত করে এবং মডিউলের মধ্যে নির্ধারণ করে।
import { NgModule } from '@angular/core';
@NgModule({
declarations: [ /* কম্পোনেন্ট, ডিরেক্টিভ, পাইপ */ ],
imports: [ /* অন্যান্য মডিউল */ ],
providers: [ /* সার্ভিস */ ],
bootstrap: [ /* রুট কম্পোনেন্ট */ ]
})
export class AppModule { }
উদাহরণ:
declarations: [
AppComponent,
HelloWorldComponent
]
উদাহরণ:
imports: [
BrowserModule,
FormsModule
]
উদাহরণ:
providers: [
MyService
]
উদাহরণ:
bootstrap: [
AppComponent
]
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { HelloWorldComponent } from './hello-world/hello-world.component';
@NgModule({
declarations: [
AppComponent,
HelloWorldComponent
],
imports: [
BrowserModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
AppModule
নামে পরিচিত।UserModule
, AdminModule
ইত্যাদি।SharedModule
।Angular CLI ব্যবহার করে নতুন মডিউল তৈরি করতে:
ng generate module user
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { UserComponent } from './user.component';
@NgModule({
declarations: [
UserComponent
],
imports: [
CommonModule
],
exports: [
UserComponent
]
})
export class UserModule { }
AppModule
এ UserModule
ইমপোর্ট করতে হবে:
import { UserModule } from './user/user.module';
@NgModule({
imports: [
BrowserModule,
UserModule
]
})
export class AppModule { }
Angular-এ NgModules অ্যাপ্লিকেশনকে সুসংগঠিত এবং ম্যানেজযোগ্য রাখে, যা ডেভেলপমেন্ট প্রক্রিয়াকে আরও সহজ এবং কার্যকর করে তোলে।
Angular অ্যাপ্লিকেশনের ভিউ বা UI (User Interface) মূলত টেম্পলেট (Template) দ্বারা তৈরি হয়। টেম্পলেট হলো HTML কোডের একটি অংশ, যা কম্পোনেন্টের ডেটাকে UI হিসেবে উপস্থাপন করে। Angular এর টেম্পলেট ডাইনামিক এবং ইন্টারঅ্যাকটিভ উপায়ে ডেটা এবং লজিক ম্যানিপুলেট করতে সাহায্য করে।
টেম্পলেট হলো HTML এর একটি বিশেষ অংশ, যেখানে Angular এর ডেটা বাইন্ডিং এবং ডিরেক্টিভ ব্যবহৃত হয়। এটি Angular কম্পোনেন্টের UI বা ভিউ তৈরি করে। টেম্পলেটের মাধ্যমে আপনি ডাইনামিকভাবে ডেটা ডিসপ্লে করতে পারেন এবং ইউজারের ইনপুট গ্রহণ করতে পারেন।
<h1>{{ title }}</h1>
<p>{{ description }}</p>
<button (click)="changeTitle()">Change Title</button>
এখানে:
{{ title }}
হলো Interpolation (ডেটা বাইন্ডিং) যা title
ভেরিয়েবল থেকে ডেটা নিয়ে কম্পোনেন্টের টেম্পলেটে দেখায়।(click)="changeTitle()"
হলো Event Binding, যা ব্যবহারকারীর ক্লিকের ইভেন্টকে হ্যান্ডল করে।এটি কম্পোনেন্টের ডেটাকে HTML টেম্পলেটের মধ্যে সন্নিবেশিত করতে ব্যবহৃত হয়।
উদাহরণ:
<h1>{{ title }}</h1>
এখানে title
কম্পোনেন্টের একটি প্রোপার্টি, যা HTML টেম্পলেটে দেখানো হচ্ছে।
এটি টেম্পলেটের HTML প্রোপার্টিতে ডেটা বাইন্ডিং করতে ব্যবহৃত হয়।
উদাহরণ:
<img [src]="imageUrl">
এখানে [src]
একটি প্রপার্টি বাইন্ডিং, যা imageUrl
কম্পোনেন্টের প্রোপার্টি থেকে ডেটা গ্রহণ করে।
এটি ইউজারের ইভেন্ট (যেমন ক্লিক, কীবোর্ড ইনপুট ইত্যাদি) এর সাথে অ্যাকশনের সম্পর্ক স্থাপন করতে ব্যবহৃত হয়।
উদাহরণ:
<button (click)="onClick()">Click Me</button>
এখানে (click)
হলো ইভেন্ট বাইন্ডিং, যা ইউজারের ক্লিক ইভেন্টকে কম্পোনেন্টের onClick()
মেথডের সাথে যুক্ত করে।
এটি কম্পোনেন্টের প্রোপার্টি এবং ইউজারের ইনপুট একে অপরের সাথে সিঙ্ক্রোনাইজ করতে ব্যবহৃত হয়।
উদাহরণ:
<input [(ngModel)]="name">
এখানে [(ngModel)]
হলো Two-way Binding, যা name
প্রোপার্টির মান ইনপুট ফিল্ডের মাধ্যমে পরিবর্তন করে এবং ইনপুট ফিল্ডে যেকোনো পরিবর্তন হলে তা name
প্রোপার্টিতে সিঙ্ক্রোনাইজ করে।
ডিরেক্টিভ হলো Angular এর একটি বিশেষ ফিচার যা DOM-এর আচরণ পরিবর্তন করতে ব্যবহৃত হয়। টেম্পলেটে বিভিন্ন ধরণের ডিরেক্টিভ ব্যবহার করা হয়, যা HTML এলিমেন্টের আচরণ বা চেহারা পরিবর্তন করতে সাহায্য করে।
Structural Directives DOM এ এলিমেন্ট যোগ বা সরানোর জন্য ব্যবহৃত হয়। এগুলি *
দিয়ে শুরু হয়।
উদাহরণ:
*ngIf
: একটি এলিমেন্ট শো বা হাইড করতে।*ngFor
: একটি লিস্ট বা অ্যারে থেকে আইটেমগুলোর উপর লুপ করতে।<div *ngIf="isVisible">This content is visible</div>
<ul>
<li *ngFor="let item of items">{{ item }}</li>
</ul>
Attribute Directives HTML এলিমেন্টের আচরণ পরিবর্তন করতে ব্যবহৃত হয়, কিন্তু DOM থেকে এলিমেন্টের আর্কিটেকচার পরিবর্তন করে না।
উদাহরণ:
ngClass
: একটি এলিমেন্টের ক্লাস অ্যাড বা রিমুভ করতে।ngStyle
: একটি এলিমেন্টের স্টাইল পরিবর্তন করতে।<div [ngClass]="{ 'highlight': isHighlighted }">Highlighted Text</div>
<div [ngStyle]="{ 'color': textColor }">Styled Text</div>
Pipes ডেটাকে টেম্পলেটের মধ্যে ফরম্যাট করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, তারিখ বা সংখ্যা ফরম্যাট করা।
উদাহরণ:
<p>{{ today | date }}</p>
<p>{{ price | currency }}</p>
Template Variables হলো টেম্পলেটের মধ্যে এমন ভেরিয়েবল, যা DOM উপাদানগুলোকে রেফারেন্স করতে ব্যবহৃত হয়।
উদাহরণ:
<input #myInput>
<button (click)="doSomething(myInput.value)">Click Me</button>
Angular এর টেম্পলেট এবং ভিউ ব্যবহারের মাধ্যমে, আপনি আপনার অ্যাপ্লিকেশনকে ডাইনামিক এবং ইউজার-ফ্রেন্ডলি বানাতে পারেন।
Angular ডিরেক্টিভস হলো এমন স্পেশাল ক্লাস যা DOM (Document Object Model)-এর আচরণ বা স্ট্রাকচার পরিবর্তন করে। ডিরেক্টিভস কম্পোনেন্টের চেহারা এবং আচরণ নিয়ন্ত্রণ করতে ব্যবহৃত হয়। Angular-এ তিন ধরনের ডিরেক্টিভস ব্যবহৃত হয়: Structural Directives, Attribute Directives, এবং Custom Directives।
Structural Directives DOM-এর স্ট্রাকচার পরিবর্তন করে, যেমন কোন এলিমেন্টকে যোগ করা, মুছে ফেলা বা দেখানো। এই ধরনের ডিরেক্টিভ সাধারণত *
চিহ্ন দিয়ে শুরু হয়।
*ngIf
ডিরেক্টিভটি একটি HTML এলিমেন্টকে শর্তসাপেক্ষে DOM-এ অন্তর্ভুক্ত বা অন্তর্ভুক্ত না করার জন্য ব্যবহৃত হয়।
উদাহরণ:
<div *ngIf="isVisible">This content is visible</div>
এখানে isVisible
যদি true
হয়, তাহলে এলিমেন্টটি DOM-এ দেখানো হবে; যদি false
হয়, তাহলে তা লুকানো হবে।
*ngFor
ডিরেক্টিভটি একটি লিস্ট বা অ্যারে ডেটাকে DOM-এ রিপিট করতে ব্যবহৃত হয়।
উদাহরণ:
<ul>
<li *ngFor="let item of items">{{ item }}</li>
</ul>
এখানে items
হলো অ্যারে বা লিস্ট, এবং এটি *ngFor
দিয়ে প্রতিটি আইটেমের জন্য একটি li
এলিমেন্ট তৈরি করবে।
*ngSwitch
ডিরেক্টিভটি একাধিক শর্ত পরীক্ষা করার জন্য ব্যবহৃত হয় এবং নির্দিষ্ট শর্তের ভিত্তিতে ভিন্ন ভিন্ন HTML এলিমেন্ট দেখানোর জন্য ব্যবহৃত হয়।
উদাহরণ:
<div [ngSwitch]="value">
<p *ngSwitchCase="'a'">A</p>
<p *ngSwitchCase="'b'">B</p>
<p *ngSwitchDefault>Default</p>
</div>
এখানে value
-এর মানের উপর ভিত্তি করে ভিন্ন ভিন্ন প্যারাগ্রাফ দেখানো হবে।
Attribute Directives কোনো HTML এলিমেন্টের আচরণ বা স্টাইল পরিবর্তন করে। এই ডিরেক্টিভগুলি এলিমেন্টের আচরণকে নিয়ন্ত্রণ করে এবং সাধারাণত HTML ট্যাগের অ্যাট্রিবিউট হিসেবে ব্যবহৃত হয়।
ngClass
ডিরেক্টিভটি এলিমেন্টের ক্লাস অ্যাট্রিবিউট পরিবর্তন করতে ব্যবহৃত হয়, যা এলিমেন্টের স্টাইল পরিবর্তন করে।
উদাহরণ:
<div [ngClass]="{ 'highlight': isHighlighted }">This is highlighted</div>
এখানে যদি isHighlighted
true
হয়, তাহলে highlight
ক্লাসটি এই div
এলিমেন্টে অ্যাড করা হবে, যা CSS এর মাধ্যমে স্টাইলিং করতে সাহায্য করবে।
ngStyle
ডিরেক্টিভটি এলিমেন্টের ইনলাইন স্টাইল পরিবর্তন করতে ব্যবহৃত হয়।
উদাহরণ:
<div [ngStyle]="{ 'color': color, 'font-size': fontSize }">Styled text</div>
এখানে color
এবং fontSize
ডাইনামিকভাবে পরিবর্তিত স্টাইল নির্ধারণ করে।
ngModel
ডিরেক্টিভটি Two-Way Data Binding এর জন্য ব্যবহৃত হয়, যা UI এবং কম্পোনেন্টের ডেটা সিঙ্ক্রোনাইজ করে।
উদাহরণ:
<input [(ngModel)]="name">
এখানে name
প্রোপার্টি ইনপুট ফিল্ডের মাধ্যমে দুই দিকেই (কম্পোনেন্ট থেকে UI এবং UI থেকে কম্পোনেন্টে) ডেটা সিঙ্ক্রোনাইজ করবে।
Custom Directives তৈরি করে আপনি Angular-এ আপনার নিজস্ব ডিরেক্টিভ তৈরি করতে পারেন। এটি সাধারণত কোনো @Directive
ডেকোরেটরের মাধ্যমে তৈরি করা হয়।
import { Directive, ElementRef, Renderer2 } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor(private el: ElementRef, private renderer: Renderer2) {
this.renderer.setStyle(this.el.nativeElement, 'background-color', 'yellow');
}
}
এই ডিরেক্টিভটি একটি appHighlight
নামে HTML অ্যাট্রিবিউট হিসেবে ব্যবহৃত হবে এবং এটি যেকোনো এলিমেন্টের ব্যাকগ্রাউন্ড কালার হলুদে পরিবর্তন করবে।
<p appHighlight>This paragraph has a yellow background.</p>
Angular ডিরেক্টিভস DOM-এর আচরণ এবং চেহারা নিয়ন্ত্রণ করতে একটি শক্তিশালী টুল। এগুলো আপনাকে কোড পুনঃব্যবহারযোগ্য, পরিষ্কার এবং কমপ্যাক্ট রাখতে সাহায্য করে। Structural Directives DOM স্ট্রাকচার পরিবর্তন করে, Attribute Directives এলিমেন্টের আচরণ বা স্টাইল পরিবর্তন করে এবং Custom Directives আপনাকে আপনার নিজস্ব ডিরেক্টিভ তৈরি করার সুযোগ দেয়।
Angular-এ সার্ভিস এবং ডিপেন্ডেন্সি ইনজেকশন (DI) অত্যন্ত গুরুত্বপূর্ণ ধারণা। Angular অ্যাপ্লিকেশন গঠনের জন্য বিভিন্ন কম্পোনেন্ট, ডিরেক্টিভ এবং সার্ভিসকে একটি মডুলার ও স্কেলেবল উপায়ে একে অপরের সাথে সংযুক্ত করা হয়। এখানে, সার্ভিস হলো সেই কোড যা কম্পোনেন্টের লজিক বা ডেটা ম্যানেজমেন্টের কাজ করে, আর ডিপেন্ডেন্সি ইনজেকশন হল Angular এর একটি ডিজাইন প্যাটার্ন যা সার্ভিস এবং অন্যান্য ডিপেন্ডেন্সি কম্পোনেন্টে ইনজেক্ট করতে ব্যবহৃত হয়।
সার্ভিস হলো একটি ক্লাস, যা সাধারণত একাধিক কম্পোনেন্ট বা অন্যান্য সার্ভিসের মধ্যে শেয়ারযোগ্য লজিক এবং ডেটা সরবরাহ করে। এটি সাধারণত Business Logic বা Data Access এর জন্য ব্যবহৃত হয়। Angular সার্ভিস ক্লাসগুলি একক ইন্সট্যান্সে (singleton) কাজ করে, যা সার্ভিসকে একাধিক কম্পোনেন্টে শেয়ার করার সুবিধা দেয়।
সার্ভিস তৈরি করতে Angular CLI ব্যবহার করা হয়:
ng generate service user
উদাহরণ:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class UserService {
constructor() { }
getUserData() {
return { name: 'John', age: 30 };
}
}
এখানে, @Injectable
ডেকোরেটরটি Angular-কে জানিয়ে দেয় যে এই ক্লাসটি একটি সার্ভিস এবং এটি ইনজেকশনের জন্য উপলব্ধ। providedIn: 'root'
নির্দেশ করে যে সার্ভিসটি অ্যাপ্লিকেশন জুড়ে একটি একক ইন্সট্যান্স (singleton) হিসেবে ব্যবহৃত হবে।
ডিপেন্ডেন্সি ইনজেকশন (DI) হলো একটি ডিজাইন প্যাটার্ন, যা মাধ্যমে একটি অবজেক্ট তার ডিপেন্ডেন্সি (যেমন সার্ভিস, কনফিগারেশন, অন্যান্য অবজেক্ট) নিজে তৈরি না করে, বরং এগুলি অ্যাঙ্গুলার ইঞ্জেকশন মেকানিজম দ্বারা সরবরাহ করা হয়।
Angular একটি DI কন্টেইনার ব্যবহার করে যা একাধিক সার্ভিসের একক ইন্সট্যান্স তৈরি করে এবং তা বিভিন্ন কম্পোনেন্ট বা সার্ভিসে ইনজেক্ট করে। DI কোডকে আরও মডুলার, টেস্টেবল এবং পুনঃব্যবহারযোগ্য করে তোলে।
ধরা যাক, আপনি একটি UserService
সার্ভিস কম্পোনেন্টে ইনজেক্ট করতে চান:
import { Component } from '@angular/core';
import { UserService } from './user.service';
@Component({
selector: 'app-root',
template: `<h1>{{ user.name }}</h1>`
})
export class AppComponent {
user: any;
constructor(private userService: UserService) {
this.user = this.userService.getUserData();
}
}
এখানে, UserService
কে AppComponent
-এ ইনজেক্ট করা হয়েছে constructor
এর মাধ্যমে। Angular নিজেই UserService
কে তৈরি করে এবং কম্পোনেন্টে সরবরাহ করে।
@Injectable
ডেকোরেটরের মাধ্যমে মার্ক করা: Angular জানিয়ে দেয় যে এটি একটি ইনজেকশনযোগ্য ক্লাস।providedIn: 'root'
দ্বারা প্রোভাইড করা হয়, তাহলে এটি অ্যাপ্লিকেশন জুড়ে একক (singleton) সার্ভিস হিসেবে ব্যবহৃত হবে।সার্ভিসকে একটি নির্দিষ্ট মডিউলে প্রোভাইড করতে চাইলে, providers
অ্যারে ব্যবহার করা হয়।
উদাহরণ:
@NgModule({
providers: [UserService]
})
export class UserModule { }
একটি কম্পোনেন্টে শুধুমাত্র সেই কম্পোনেন্টের জন্য সার্ভিস প্রোভাইড করা যেতে পারে।
উদাহরণ:
@Component({
selector: 'app-user',
providers: [UserService]
})
export class UserComponent {
constructor(private userService: UserService) { }
}
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class ProductService {
getProducts() {
return ['Product 1', 'Product 2', 'Product 3'];
}
}
@Component({
selector: 'app-product',
template: `<ul><li *ngFor="let product of products">{{ product }}</li></ul>`
})
export class ProductComponent {
products: string[];
constructor(private productService: ProductService) {
this.products = this.productService.getProducts();
}
}
এখানে ProductService
সার্ভিসটি ProductComponent
-এ ইনজেক্ট করা হয়েছে, এবং getProducts()
মেথডের মাধ্যমে ডেটা প্রাপ্তি হচ্ছে।
সারাংশ:
Angular-এ সার্ভিস এবং ডিপেন্ডেন্সি ইনজেকশন অ্যাপ্লিকেশন ডেভেলপমেন্টকে মডুলার, পুনঃব্যবহারযোগ্য এবং টেস্টযোগ্য করে তোলে। সার্ভিস কম্পোনেন্টে ইনজেক্ট করা হয় এবং তা ডেটা এবং লজিক সরবরাহ করে। ডিপেন্ডেন্সি ইনজেকশন দ্বারা ডিপেন্ডেন্সি কম্পোনেন্ট বা সার্ভিসের মধ্যে সরবরাহ করা হয়, যা কোডের পরিষ্কারতা এবং পরিচালনক্ষমতা বৃদ্ধি করে।
Angular অ্যাপ্লিকেশন গুলোর মধ্যে রাউটিং এবং নেভিগেশন অত্যন্ত গুরুত্বপূর্ণ অংশ। রাউটিং হলো একটি অ্যাপ্লিকেশন ব্যবহারকারীর জন্য ভিন্ন ভিন্ন পেজ বা ভিউতে নেভিগেট করার পদ্ধতি। Angular-এ Router ব্যবহার করে এক পেজ থেকে অন্য পেজে যাওয়া এবং ব্যবহারকারীর চাহিদা অনুযায়ী UI পরিবর্তন করা হয়। এটি Single Page Application (SPA) তৈরি করতে সাহায্য করে, যেখানে পুরো পেজ রিফ্রেশ না হয়ে কেবলমাত্র প্রয়োজনীয় অংশ পরিবর্তিত হয়।
রাউটিং হলো একটি সিস্টেম যা ব্যবহারকারীকে বিভিন্ন URL বা পেজের মধ্যে নেভিগেট করতে সাহায্য করে। Angular অ্যাপ্লিকেশনে রাউটিং ব্যবহার করে URL অনুযায়ী নির্দিষ্ট কম্পোনেন্ট লোড করা হয়। রাউটার অ্যাপ্লিকেশনটি "একক পেজ অ্যাপ্লিকেশন" হিসেবে কাজ করতে সক্ষম করে, যেখানে পেজ লোড করার সময় সম্পূর্ণ নতুন পেজ লোড না হয়ে শুধুমাত্র সংশ্লিষ্ট অংশ রেন্ডার করা হয়।
Angular-এ রাউটিং কনফিগার করতে হয় RouterModule
ব্যবহার করে। AppRoutingModule একটি মডিউল হিসেবে রাউটিং কনফিগার করে এবং এই মডিউলটিকে মূল অ্যাপ মডিউলে (AppModule) অন্তর্ভুক্ত করা হয়।
রাউটিং কনফিগার করার জন্য প্রথমে অ্যাপ্লিকেশনকে একটি রাউটিং মডিউল তৈরি করতে হয়। CLI ব্যবহার করে এই মডিউলটি তৈরি করা যেতে পারে:
ng generate module app-routing --flat --module=app
এখানে, app-routing.module.ts
ফাইলে রাউটিং কনফিগারেশন লিখতে হবে। উদাহরণস্বরূপ:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
import { NotFoundComponent } from './not-found/not-found.component';
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'about', component: AboutComponent },
{ path: '**', component: NotFoundComponent }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
এখানে:
path: ''
ডিফল্ট রুট হিসেবে ব্যবহৃত হয়, যেটি সাধারণত হোম পেজ বা মূল পেজ হিসেবে কাজ করে।path: 'about'
হলো /about
URL এর জন্য রাউট, যা AboutComponent
কে লোড করবে।path: '**'
ব্যবহার করা হয় কোন অজানা রুটের জন্য, যা সাধারণত 404 পেজ বা Not Found পেজের জন্য ব্যবহৃত হয়।AppRoutingModule
মডিউলটি অ্যাপের মূল মডিউল AppModule-এ অন্তর্ভুক্ত করতে হয়:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
এখানে, AppRoutingModule
কে imports
অ্যারে তে যুক্ত করা হয়েছে, যা অ্যাপ্লিকেশনটি রাউটিং ব্যবস্থাপনার জন্য প্রস্তুত করে।
রাউটিং কনফিগার করার পর, বিভিন্ন কম্পোনেন্ট বা HTML টেমপলেটে ব্যবহারকারীকে রাউট করতে হবে। Angular বিভিন্নভাবে রাউটিং এবং নেভিগেশন সাপোর্ট করে।
Angular-এ RouterLink
ডিরেক্টিভ ব্যবহার করে কোনো নির্দিষ্ট রুটে নেভিগেট করা হয়। এটি একটি উপযুক্ত URL তৈরি করে যেটি ব্যবহারকারী ক্লিক করলে নির্দিষ্ট রুটে নিয়ে যাবে।
উদাহরণ:
<a routerLink="/about">About</a>
এখানে, routerLink="/about"
ব্যবহারকারীর ক্লিক করার মাধ্যমে /about
রুটে নেভিগেট করবে।
কম্পোনেন্টের ভিতরেও রাউটিং করা যায়, যেখানে Angular এর Router ক্লাস ব্যবহার করে প্রোগ্রাম্যাটিক্যালি নেভিগেট করা হয়। উদাহরণ:
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-root',
template: `<button (click)="goToAbout()">Go to About</button>`
})
export class AppComponent {
constructor(private router: Router) {}
goToAbout() {
this.router.navigate(['/about']);
}
}
এখানে, this.router.navigate(['/about'])
ব্যবহৃত হয়েছে, যাতে ব্যবহারকারী ক্লিক করলে /about
রুটে নেভিগেট করা হয়।
রাউটিং ব্যবস্থাপনা করার জন্য আপনাকে অ্যাপ্লিকেশনের টেমপলেটে <router-outlet>
ট্যাগ ব্যবহার করতে হবে, যেখানে নির্দিষ্ট রুটের কম্পোনেন্ট রেন্ডার হবে।
<router-outlet></router-outlet>
এটি একটি বিশেষ ট্যাগ যা Angular রাউটার দ্বারা রেন্ডারিং কম্পোনেন্টের জন্য ব্যবহৃত হয়।
Angular রাউটিং সিস্টেম ব্যবহার করে নির্দিষ্ট রুটে নেভিগেশন প্রোটেক্ট করা যায়। উদাহরণস্বরূপ, লগইন বা অথরাইজেশন চেক করার জন্য গার্ড ব্যবহার করা যেতে পারে। গার্ডস মূলত রাউটিংয়ের আগে কিছু শর্ত চেক করে।
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
const isAuthenticated = false; // এখানে প্রপার লগিন চেক করতে হবে
if (!isAuthenticated) {
this.router.navigate(['/login']);
return false;
}
return true;
}
}
এখানে AuthGuard
ক্লাসটি /login
রুটে নেভিগেট করবে যদি ব্যবহারকারী অথরাইজড না থাকে।
Angular রাউটিং একটি গুরুত্বপূর্ণ ফিচার যা ব্যবহারকারীর অ্যাপ্লিকেশনের বিভিন্ন অংশে সহজেই নেভিগেট করতে সাহায্য করে। এটি একাধিক ভিউ বা পেজের মধ্যে সহজে টগল করার জন্য ব্যবহৃত হয় এবং সিঙ্গেল পেজ অ্যাপ্লিকেশন তৈরি করতে সহায়ক। RouterLink, Router.navigate(), এবং Router Outlet এর মাধ্যমে Angular অ্যাপ্লিকেশনে নেভিগেশন কার্যকর করা হয়।
Read more