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 ব্যবহার করে আপনি ট্রি কম্পোনেন্টের ডিজাইনও কাস্টমাইজ করতে পারবেন।
Read more