Angular Material এর MatTree কম্পোনেন্ট একটি অত্যন্ত কার্যকরী উপাদান, যা হায়ারার্কিক্যাল ডেটা বা ডেটা যেটি একটি গাছ (tree) স্ট্রাকচারে সাজানো থাকে, তা প্রদর্শন করার জন্য ব্যবহৃত হয়। এটি সাধারণত ফাইল সিস্টেম, ন্যাভিগেশন মেনু বা হায়ারার্কিক্যাল ডেটার মতো ভিউ তৈরির জন্য ব্যবহার করা হয়।
Angular Material এর MatTree কম্পোনেন্টটি খুবই কাস্টমাইজেবল এবং এটি সহজেই ট্রি নোডস, ড্র্যাগ-এন্ড-ড্রপ ফিচার, পেজিনেশন, ফিল্টারিং, আইকন ব্যবহারের সুবিধা সরবরাহ করে।
প্রথমে, MatTreeModule
এবং MatIconModule
মডিউলগুলো আপনার app.module.ts ফাইলে ইমপোর্ট করতে হবে:
import { MatTreeModule } from '@angular/material/tree';
import { MatIconModule } from '@angular/material/icon';
@NgModule({
imports: [
MatTreeModule,
MatIconModule,
]
})
export class AppModule {}
MatTree কম্পোনেন্টের মাধ্যমে একটি সাধারণ ট্রি তৈরি করা যেতে পারে। নিচে এর একটি উদাহরণ দেওয়া হলো:
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>
<li class="mat-tree-node">
<button mat-icon-button disabled>
<mat-icon *ngIf="node.children?.length">{{node.expandable ? 'expand_more' : 'chevron_right'}}</mat-icon>
</button>
{{node.name}}
</li>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node; when: hasChild" matTreeNodeToggle>
<li class="mat-tree-node">
<button mat-icon-button [attr.aria-label]="'Toggle ' + node.name" (click)="toggleNode(node)">
<mat-icon *ngIf="node.expandable">{{node.expandable ? 'expand_more' : 'chevron_right'}}</mat-icon>
</button>
{{node.name}}
</li>
</mat-tree-node>
</mat-tree>
এখানে, mat-tree-node উপাদান ব্যবহার করে ট্রী নোড তৈরি করা হয়েছে। node.expandable
চেক করে, যদি নোডে children থাকে তবে এটি "expand" বা "collapse" আইকন দেখাবে।
MatTree কম্পোনেন্টের কাজ করার জন্য, TreeControl এবং DataSource কনফিগার করা প্রয়োজন।
import { Component, OnInit } from '@angular/core';
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { FlatTreeControl } from '@angular/cdk/tree';
// নোডের ধরণ
export interface TreeNode {
name: string;
children?: TreeNode[];
}
// ফ্ল্যাট নোডের ধরণ
export interface FlatTreeNode {
expandable: boolean;
name: string;
level: number;
}
@Component({
selector: 'app-tree',
templateUrl: './tree.component.html',
styleUrls: ['./tree.component.css']
})
export class TreeComponent implements OnInit {
treeControl: FlatTreeControl<FlatTreeNode>;
dataSource: MatTreeFlatDataSource<TreeNode, FlatTreeNode>;
constructor() {
const treeFlattener = new MatTreeFlattener(
this.transformer,
this.getLevel,
this.isExpandable,
this.getChildren
);
this.treeControl = new FlatTreeControl<FlatTreeNode>(this.getLevel, this.isExpandable);
this.dataSource = new MatTreeFlatDataSource(this.treeControl, treeFlattener);
}
ngOnInit() {
const TREE_DATA: TreeNode[] = [
{
name: 'Fruit',
children: [
{ name: 'Apple' },
{ name: 'Orange' },
{ name: 'Banana' }
]
},
{
name: 'Vegetables',
children: [
{ name: 'Tomato' },
{ name: 'Lettuce' },
{ name: 'Carrot' }
]
}
];
this.dataSource.data = TREE_DATA;
}
// নোডে children এক্সেস করা
private transformer = (node: TreeNode, level: number) => {
return {
expandable: !!node.children && node.children.length > 0,
name: node.name,
level: level
};
}
// নোডের স্তর নির্ধারণ করা
private getLevel = (node: FlatTreeNode) => node.level;
// নোড এক্সপ্যান্ডেবল কিনা তা চেক করা
private isExpandable = (node: FlatTreeNode) => node.expandable;
// নোডের children পাওয়ার জন্য
private getChildren = (node: TreeNode): TreeNode[] => node.children;
hasChild = (_: number, node: FlatTreeNode) => node.expandable;
}
TreeControl
: এটি ট্রির জন্য কন্ট্রোলিং লজিক সরবরাহ করে, যেমন একটি নোড এক্সপ্যান্ড করা বা কলাপস করা।MatTreeFlatDataSource
: এটি ডেটা এবং ট্রি কন্ট্রোলের মধ্যে সংযোগ স্থাপন করে।MatTreeFlattener
: এটি ট্রী ডেটাকে ফ্ল্যাট করে এবং তার পরে উপযুক্ত তথ্য প্রক্রিয়া করে।ট্রী কনট্রোল এবং ট্রি নোডের মধ্যে স্টাইলের পরিবর্তন করতে আপনি CSS বা SCSS ব্যবহার করতে পারেন:
.mat-tree-node {
list-style-type: none;
}
.mat-tree-node mat-icon {
margin-right: 8px;
}
button.mat-icon-button {
width: 24px;
height: 24px;
}
এটি ট্রী নোডের মধ্যে আইকন এবং স্পেসিংকে কাস্টমাইজ করবে।
MatTree কম্পোনেন্টে Angular CDK এর ড্র্যাগ-এন্ড-ড্রপ ফিচার ব্যবহারের মাধ্যমে আপনি ট্রী নোডগুলোকে ড্র্যাগ এবং ড্রপ করতে পারবেন। এর জন্য DragDropModule ইমপোর্ট এবং কনফিগারেশন করতে হবে।
import { DragDropModule } from '@angular/cdk/drag-drop';
এটি আপনার app.module.ts ফাইলে ইমপোর্ট করুন এবং ট্রী নোডে ড্র্যাগ-এন্ড-ড্রপ কার্যকারিতা যোগ করুন।
Angular Material Tree কম্পোনেন্ট হায়ারার্কিক্যাল ডেটা প্রদর্শন করার জন্য একটি শক্তিশালী এবং কাস্টমাইজেবল টুল। এটি ডেটার স্তর, এক্সপ্যান্ডেবল নোডস, ড্র্যাগ-এন্ড-ড্রপ, এবং আইকন সাপোর্ট সহ অনেক ফিচার প্রদান করে। আপনি TreeControl এবং DataSource ব্যবহার করে ডেটা ম্যানেজমেন্ট করতে পারেন, এবং Angular Material এর অন্যান্য ফিচার যেমন আইকন, পেজিনেশন, এবং ফিল্টারিং ব্যবহার করে আরো ইন্টারঅ্যাকটিভ এবং সুন্দর ট্রি ভিউ তৈরি করতে পারেন।
Angular Material এর MatTree কম্পোনেন্ট হায়ারার্কিক্যাল ডেটা বা ট্রি-স্ট্রাকচারযুক্ত ডেটা প্রদর্শন করতে ব্যবহৃত হয়। এটি একটি গাছের মতো স্ট্রাকচার তৈরি করে, যেখানে প্রতিটি নোড এক্সপ্যান্ডেবল বা কলাপ্সযোগ্য হতে পারে এবং উপরের স্তর থেকে নিচে ডেটা দেখতে এবং ম্যানেজ করতে সহায়তা করে। Material Tree সাধারণত ফাইল সিস্টেম, মেনু, বা ন্যাভিগেশন ডেটা দেখানোর জন্য ব্যবহৃত হয়, যেখানে ডেটার একাধিক স্তর থাকে।
Angular Material এর MatTree কম্পোনেন্টটি অত্যন্ত কাস্টমাইজেবল এবং এতে অনেক উন্নত ফিচার যেমন ড্র্যাগ-এন্ড-ড্রপ, ইন্টারঅ্যাকটিভ এক্সপ্যান্ডেবল নোডস, এবং টেমপ্লেট কাস্টমাইজেশন রয়েছে।
প্রথমে, MatTreeModule, MatIconModule, এবং MatButtonModule আপনার app.module.ts ফাইলে ইমপোর্ট করতে হবে।
import { MatTreeModule } from '@angular/material/tree';
import { MatIconModule } from '@angular/material/icon';
import { MatButtonModule } from '@angular/material/button';
@NgModule({
imports: [
MatTreeModule,
MatIconModule,
MatButtonModule
]
})
export class AppModule {}
Angular Material এর MatTree কম্পোনেন্টে ডেটা প্রদর্শন করতে নিচে একটি উদাহরণ দেওয়া হলো:
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>
<li>
<button mat-icon-button disabled>
<mat-icon *ngIf="node.children?.length">{{node.expandable ? 'expand_more' : 'chevron_right'}}</mat-icon>
</button>
{{node.name}}
</li>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node; when: hasChild" matTreeNodeToggle>
<li>
<button mat-icon-button (click)="toggleNode(node)">
<mat-icon *ngIf="node.expandable">{{node.expandable ? 'expand_more' : 'chevron_right'}}</mat-icon>
</button>
{{node.name}}
</li>
</mat-tree-node>
</mat-tree>
এখানে:
এখন, TreeControl এবং DataSource কনফিগার করা প্রয়োজন।
import { Component, OnInit } from '@angular/core';
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { FlatTreeControl } from '@angular/cdk/tree';
// নোডের ধরণ
export interface TreeNode {
name: string;
children?: TreeNode[];
}
// ফ্ল্যাট নোডের ধরণ
export interface FlatTreeNode {
expandable: boolean;
name: string;
level: number;
}
@Component({
selector: 'app-tree',
templateUrl: './tree.component.html',
styleUrls: ['./tree.component.css']
})
export class TreeComponent implements OnInit {
treeControl: FlatTreeControl<FlatTreeNode>;
dataSource: MatTreeFlatDataSource<TreeNode, FlatTreeNode>;
constructor() {
const treeFlattener = new MatTreeFlattener(
this.transformer,
this.getLevel,
this.isExpandable,
this.getChildren
);
this.treeControl = new FlatTreeControl<FlatTreeNode>(this.getLevel, this.isExpandable);
this.dataSource = new MatTreeFlatDataSource(this.treeControl, treeFlattener);
}
ngOnInit() {
const TREE_DATA: TreeNode[] = [
{
name: 'Fruit',
children: [
{ name: 'Apple' },
{ name: 'Orange' },
{ name: 'Banana' }
]
},
{
name: 'Vegetables',
children: [
{ name: 'Tomato' },
{ name: 'Lettuce' },
{ name: 'Carrot' }
]
}
];
this.dataSource.data = TREE_DATA;
}
// নোডে children এক্সেস করা
private transformer = (node: TreeNode, level: number) => {
return {
expandable: !!node.children && node.children.length > 0,
name: node.name,
level: level
};
}
// নোডের স্তর নির্ধারণ করা
private getLevel = (node: FlatTreeNode) => node.level;
// নোড এক্সপ্যান্ডেবল কিনা তা চেক করা
private isExpandable = (node: FlatTreeNode) => node.expandable;
// নোডের children পাওয়ার জন্য
private getChildren = (node: TreeNode): TreeNode[] => node.children;
hasChild = (_: number, node: FlatTreeNode) => node.expandable;
}
এখানে:
MatTree কম্পোনেন্টে Angular CDK এর ড্র্যাগ-এন্ড-ড্রপ ফিচার ব্যবহারের মাধ্যমে আপনি ট্রী নোডগুলোকে ড্র্যাগ এবং ড্রপ করতে পারবেন। এটি DragDropModule ইমপোর্ট এবং কনফিগারেশনের মাধ্যমে করা যায়।
import { DragDropModule } from '@angular/cdk/drag-drop';
এটি আপনার app.module.ts ফাইলে ইমপোর্ট করুন এবং ট্রী নোডে ড্র্যাগ-এন্ড-ড্রপ কার্যকারিতা যোগ করুন।
Angular Material Tree কম্পোনেন্ট একটি শক্তিশালী এবং কাস্টমাইজযোগ্য উপাদান যা গাছের মতো হায়ারার্কিক্যাল ডেটা প্রদর্শন করতে ব্যবহৃত হয়। এটি ডেটা এক্সপ্যান্ডিং, ড্র্যাগ-এন্ড-ড্রপ, কাস্টম আইকন এবং অন্যান্য ফিচার সমর্থন করে, যা আপনার অ্যাপ্লিকেশনকে আরো ইন্টারঅ্যাকটিভ এবং ব্যবহারকারী-বান্ধব করে তোলে। MatTree এর মাধ্যমে আপনি হায়ারার্কিক্যাল ডেটা সহজে ম্যানেজ এবং প্রদর্শন করতে পারেন।
Angular Material এর MatTree কম্পোনেন্ট দুই ধরনের ট্রি প্রদর্শন করতে পারে: ফ্ল্যাট ট্রি (Flat Tree) এবং নেস্টেড ট্রি (Nested Tree)। এই দুই ধরনের ট্রি স্ট্রাকচারের মধ্যে মূল পার্থক্য হল তাদের ডেটার আর্কিটেকচার এবং কীভাবে তারা ব্যবহারকারীর কাছে ডেটা উপস্থাপন করে।
এখানে ফ্ল্যাট ট্রি এবং নেস্টেড ট্রি এর মধ্যে পার্থক্য এবং তাদের ব্যবহারের ক্ষেত্রে সুবিধাগুলি ব্যাখ্যা করা হচ্ছে।
ফ্ল্যাট ট্রি হল এমন একটি ডেটা স্ট্রাকচার যেখানে সমস্ত নোডগুলো একটি সোজা লিস্টের মতো থাকে। তবে, প্রতিটি নোডের জন্য একটি level প্রপার্টি থাকে, যা নির্দেশ করে যে নোডটি কোন স্তরে অবস্থান করছে।
export interface TreeNode {
name: string;
children?: TreeNode[];
}
export interface FlatTreeNode {
expandable: boolean;
name: string;
level: number;
}
এখানে, TreeNode
হল মূল ডেটা, এবং FlatTreeNode
হল ফ্ল্যাট ট্রি তৈরি করার জন্য প্রক্রিয়াজাত ডেটা।
ফ্ল্যাট ট্রি সাধারণত ব্যবহার করা হয় যেখানে ডেটার স্তর না থাকা বা ডেটার প্রতিটি অংশ একইভাবে হ্যান্ডল করা হয়। এটি সাধারণত এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে ডেটার হায়ারার্কি সোজা ও সরল হতে হয়।
নেস্টেড ট্রি হল একটি ডেটা স্ট্রাকচার যেখানে নোডগুলো তাদের সন্তানদের মধ্যে হায়ারার্কিকালভাবে সাজানো থাকে। প্রতিটি নোডের মধ্যে children প্রপার্টি থাকে, যা তার সন্তানের নোডগুলোকে ধারণ করে।
export interface TreeNode {
name: string;
children?: TreeNode[];
}
এখানে, children প্রপার্টি দ্বারা একটি নোডের সন্তানের নোডসমূহ নির্ধারিত হচ্ছে।
নেস্টেড ট্রি সাধারণত এমন ক্ষেত্রে ব্যবহার করা হয় যেখানে ডেটা একটি স্পষ্ট স্তরভিত্তিক হায়ারার্কি অনুসরণ করে। যেমন ফাইল সিস্টেম, ডিরেক্টরি স্ট্রাকচার, অথবা ন্যাভিগেশন মেনু যেখানে প্রতিটি সেকশন একটি বা একাধিক উপসেকশন থাকতে পারে।
ফিচার | ফ্ল্যাট ট্রি (Flat Tree) | নেস্টেড ট্রি (Nested Tree) |
---|---|---|
ডেটার কাঠামো | একক স্তরে ফ্ল্যাট ডেটা, একাধিক স্তরের তথ্য মিশ্রিত | স্তরভিত্তিক হায়ারার্কিকাল ডেটা, children প্রপার্টি দিয়ে |
ডেটা সংগঠন | একটি লিস্টের মধ্যে সমস্ত নোড থাকে | একাধিক স্তরে বা গাছের মধ্যে নোড এবং তাদের সন্তানরা থাকে |
ব্যবহার | সরল ডেটা সেট বা যখন ডেটা হায়ারার্কি কম | জটিল হায়ারার্কিকাল ডেটা সেট যেমন ফাইল সিস্টেম বা মেনু |
প্রক্রিয়া | MatTreeFlattener এবং MatTreeFlatDataSource ব্যবহার | MatTreeNestedDataSource এবং MatTree ব্যবহার |
ডেটার স্তর | একটি level প্রপার্টি দিয়ে স্তর নির্ধারণ করা হয় | প্রতিটি নোডের children প্রপার্টি দিয়ে সন্তানকে সংজ্ঞায়িত করা হয় |
Angular Material এর MatTree কম্পোনেন্টের মাধ্যমে, আপনি উভয় ধরনের ট্রি সহজেই তৈরি করতে পারেন এবং প্রয়োজন অনুযায়ী কাস্টমাইজ করতে পারেন।
Angular Material এ MatTree কম্পোনেন্ট ব্যবহার করে আপনি একটি ডাইনামিক ট্রি তৈরি করতে পারেন, যা ডাটা হায়ারার্কি বা নেস্টেড (nested) ডাটা প্রদর্শন করার জন্য উপযোগী। ডাইনামিক ট্রি তৈরি করার জন্য, Angular Material-এর MatTree এবং MatTreeNode কম্পোনেন্ট ব্যবহার করা হয়।
এটি সাধারণত ডাটা-ড্রিভেন বা ফাইল সিস্টেম লিস্টের মতো ডাটা দেখানোর জন্য ব্যবহার করা হয়। এই কম্পোনেন্টটি ব্যবহারকারীর জন্য একটি সহজ এবং ইনটুইটিভ ট্রি-ভিউ প্রদান করে, যা সহজে নেভিগেট করা যায়।
প্রথমে, MatTreeModule এবং MatIconModule আপনার অ্যাপ্লিকেশনে ইমপোর্ট করতে হবে, যাতে আপনি ট্রি এবং আইকন ব্যবহার করতে পারেন।
import { MatTreeModule } from '@angular/material/tree';
import { MatIconModule } from '@angular/material/icon';
@NgModule({
imports: [
MatTreeModule,
MatIconModule
]
})
export class AppModule { }
ডাইনামিক ট্রি তৈরি করতে ডাটা মডেল তৈরি করতে হবে। আমরা একটি nested ডাটা ব্যবহার করবো যেখানে প্রতিটি উপাদান (node) অন্য উপাদান (children) ধারণ করতে পারে।
interface TreeNode {
name: string;
children?: TreeNode[];
}
const TREE_DATA: TreeNode[] = [
{
name: 'Fruit',
children: [
{ name: 'Apple' },
{ name: 'Orange' },
{ name: 'Banana' }
]
},
{
name: 'Vegetables',
children: [
{ name: 'Carrot' },
{ name: 'Broccoli' }
]
},
{
name: 'Grains',
children: [
{ name: 'Rice' },
{ name: 'Wheat' }
]
}
];
এখানে, TreeNode
ইন্টারফেসে name
এবং একটি অপশনাল children
অ্যারে দেওয়া হয়েছে, যা শিশু উপাদান (nested nodes) ধারণ করতে পারে।
এখন HTML ফাইলে mat-tree কম্পোনেন্ট ব্যবহার করে ট্রি তৈরি করা যাবে। mat-tree
এর মাধ্যমে আপনি ট্রী নোড (node) এবং তার চাইল্ড নোড (children) হ্যান্ডেল করতে পারবেন।
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>
<li>
<div class="mat-tree-node">
<mat-icon matTreeNodeToggle>expand_more</mat-icon>
<span>{{ node.name }}</span>
</div>
</li>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node; when: hasChild" matTreeNodeToggle>
<li>
<div class="mat-tree-node">
<mat-icon matTreeNodeToggle>expand_more</mat-icon>
<span>{{ node.name }}</span>
</div>
<mat-tree [dataSource]="node.children" [treeControl]="treeControl"></mat-tree>
</li>
</mat-tree-node>
</mat-tree>
এখানে:
*matTreeNodeDef
ডিরেকটিভ দ্বারা ট্রি নোডের জন্য একটি উপস্থাপনা সংজ্ঞায়িত করা হয়েছে।Angular এর FlatTreeControl এবং MatTreeFlatDataSource ব্যবহার করে আপনি ট্রি কন্ট্রোল এবং ডাটা সোর্স সেট করবেন।
import { Component } from '@angular/core';
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { FlatTreeControl } from '@angular/cdk/tree';
@Component({
selector: 'app-tree',
templateUrl: './tree.component.html',
styleUrls: ['./tree.component.css']
})
export class TreeComponent {
treeControl: FlatTreeControl<TreeNode>;
treeFlattener: MatTreeFlattener<TreeNode, any>;
dataSource: MatTreeFlatDataSource<TreeNode, any>;
constructor() {
this.treeFlattener = new MatTreeFlattener(
this.transformer,
this.getLevel,
this.isExpandable,
this.getChildren
);
this.treeControl = new FlatTreeControl<TreeNode>(this.getLevel, this.isExpandable);
this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
this.dataSource.data = TREE_DATA;
}
transformer(node: TreeNode, level: number): any {
return {
...node,
level
};
}
getLevel = (node: any) => node.level;
isExpandable = (node: any) => !!node.children;
getChildren = (node: TreeNode): TreeNode[] => node.children;
hasChild = (_: number, node: TreeNode) => !!node.children;
}
এখানে:
ট্রির ডিজাইন এবং আউটপুট কাস্টমাইজ করতে CSS বা SCSS ব্যবহার করা যায়। উদাহরণস্বরূপ, ট্রি নোডের স্টাইল পরিবর্তন করা:
.mat-tree-node {
display: flex;
align-items: center;
padding: 5px 10px;
}
.mat-tree-node span {
margin-left: 8px;
}
.mat-tree-node mat-icon {
cursor: pointer;
}
এখানে, ট্রি নোডের মধ্যে আইকন এবং টেক্সটের মাঝে মার্জিন এবং প্যাডিং দেয়া হয়েছে, এবং আইকনগুলিকে ক্লিকযোগ্য (pointer) করা হয়েছে।
Angular Material এর MatTree কম্পোনেন্ট ব্যবহার করে ডাইনামিক এবং কাস্টমাইজযোগ্য ট্রি তৈরি করা সম্ভব। এটি আপনার অ্যাপ্লিকেশনে নেস্টেড ডাটা বা হায়ারার্কিক্যাল ডাটা প্রদর্শন করতে সাহায্য করে। Angular Material এর FlatTreeControl এবং MatTreeFlatDataSource ব্যবহার করে আপনি সহজেই ট্রি কন্ট্রোল এবং ডাটা সোর্স কাস্টমাইজ করতে পারেন। CSS বা SCSS ব্যবহার করে আপনি ট্রি কম্পোনেন্টের ডিজাইনও কাস্টমাইজ করতে পারবেন।
Angular Material এর MatTree কম্পোনেন্ট ট্রি ভিউ তৈরি করতে ব্যবহৃত হয়, যেখানে ডেটা একটি কাঠামোবদ্ধ হায়ারার্কির (hierarchical) আকারে প্রদর্শিত হয়। এটি সাধারণত ব্যবহারকারীদের তথ্য নেভিগেশনে সাহায্য করতে ব্যবহৃত হয়, যেমন ফাইল সিস্টেম বা ক্যাটেগরি বায়ানির জন্য। Lazy loading এর মাধ্যমে, বড় ডেটা কাঠামোকে শুধু তখনই লোড করা হয় যখন সেই ডেটার প্রয়োজন হয়, যা অ্যাপ্লিকেশন পারফরম্যান্সে বড় ধরনের উন্নতি নিয়ে আসে।
এই টিউটোরিয়ালে, আমরা দেখব কীভাবে Angular Material এর MatTree কম্পোনেন্টের সাথে লেজি লোডিং কার্যকারিতা ইমপ্লিমেন্ট করা যায়।
Angular Material এর MatTree কম্পোনেন্ট ট্রি নোড লোড করতে FlatTree বা NestedTree ব্যবহার করতে পারে। লেজি লোডিং ট্রি নোড সাধারণত NestedTree এর মাধ্যমে ব্যবহৃত হয়, যেখানে শিশুর নোডগুলো ক্লিক করার পর লোড হয়।
প্রথমে MatTreeModule এবং MatIconModule ইমপোর্ট করতে হবে।
import { MatTreeModule } from '@angular/material/tree';
import { MatIconModule } from '@angular/material/icon';
import { MatButtonModule } from '@angular/material/button';
import { NgModule } from '@angular/core';
@NgModule({
imports: [
MatTreeModule,
MatIconModule,
MatButtonModule
]
})
export class AppModule {}
লেজি লোডিং ট্রি নোডের জন্য ডেটা উৎস তৈরি করতে হবে। উদাহরণস্বরূপ, একটি TreeControl এবং DataSource তৈরি করা হয় যা ডেটার লেজি লোডিং পরিচালনা করবে।
import { Component } from '@angular/core';
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { FlatTreeControl } from '@angular/cdk/tree';
interface ExampleNode {
name: string;
children?: ExampleNode[];
}
@Component({
selector: 'app-tree',
templateUrl: './tree.component.html',
styleUrls: ['./tree.component.css']
})
export class TreeComponent {
treeControl: FlatTreeControl<any>;
treeFlattener: MatTreeFlattener<any, any>;
dataSource: MatTreeFlatDataSource<any, any>;
constructor() {
const transformer = (node: ExampleNode, level: number) => ({
expandable: !!node.children && node.children.length > 0,
name: node.name,
level
});
this.treeFlattener = new MatTreeFlattener(transformer, node => node.level, node => node.expandable, node => node.children);
this.treeControl = new FlatTreeControl<any, any>(node => node.level, node => node.expandable);
this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
}
// লেজি লোডিং ফাংশন
getChildren(node: ExampleNode): ExampleNode[] {
return node.children ? node.children : [];
}
hasChild = (_: number, node: any) => node.expandable;
}
এখানে:
এখন HTML টেমপ্লেটে ট্রি ভিউটি দেখানোর জন্য কোড লিখতে হবে।
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>
<button mat-icon-button disabled></button>
{{node.name}}
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node; when: hasChild">
<button mat-icon-button matTreeNodeToggle [attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_less' : 'expand_more'}}
</mat-icon>
</button>
{{node.name}}
</mat-tree-node>
</mat-tree>
এখানে:
এখন আপনি লেজি লোডিং ইমপ্লিমেন্ট করতে getChildren ফাংশন ব্যবহার করতে পারেন, যা পিতামাতার নোডের ক্লিক করার পর শুধুমাত্র সেই নোডের শিশুদের লোড করবে।
// লেজি লোডিং ফাংশন
getChildren(node: ExampleNode): ExampleNode[] {
if (!node.children) {
node.children = this.loadData(node.name); // লোড ডেটা
}
return node.children;
}
// ডেটা লোড করার জন্য একটি সিম্পল ফাংশন
loadData(parentName: string): ExampleNode[] {
// এখানে API কল বা স্ট্যাটিক ডেটা লোড করা যেতে পারে
return [
{ name: `${parentName} Child 1` },
{ name: `${parentName} Child 2` },
];
}
এখানে, getChildren ফাংশনটি শুধুমাত্র তখনই শিশু নোড লোড করবে যখন পিতামাতা নোডটি ক্লিক করা হবে, যা লেজি লোডিং এর ধারণা অনুসরণ করে।
MatTree কম্পোনেন্টের মাধ্যমে Angular Material এ লেজি লোডিং ট্রি নোড তৈরি করা সহজ এবং কার্যকরী। FlatTree এবং NestedTree এর মাধ্যমে আপনি ডেটা কাঠামোকে দক্ষভাবে ম্যানেজ করতে পারেন। লেজি লোডিং দ্বারা শুধুমাত্র প্রয়োজনীয় ডেটা লোড হয়, যা পারফরম্যান্স উন্নত করতে সহায়তা করে। MatTree কম্পোনেন্টে লেজি লোডিং কার্যকারিতা ইমপ্লিমেন্ট করে, আপনি বড় ডেটাসেট পরিচালনা করতে পারেন, যাতে ব্যবহারকারীরা দ্রুত এবং সহজভাবে অ্যাপ্লিকেশনের ট্রি ডেটা দেখতে পায়।
Read more