تحويل JSON إلى قائمة غير مرتبة باستخدام Angular 2 ngFor
في البداية، يجب أن نلاحظ أن Angular 2 تم تطويره باستخدام TypeScript، مما يجعله يحتوي على ميزات تقنية حديثة وقوية. لتحقيق هذا الهدف، يمكننا كتابة مكون (Component) يتيح لنا تحويل البيانات من هيكل JSON إلى قائمة غير مرتبة (unordered list) باستخدام ngFor.
فيما يلي مثال لمكون Angular 2 يقوم بتحويل هيكل JSON إلى قائمة غير مرتبة باستخدام ngFor:
typescriptimport { Component, Input } from '@angular/core';
@Component({
selector: 'json-tree',
template: `
-
{{ node.name }}
`,
})
export class JsonTreeComponent {
@Input() nodes: any[];
}
في هذا المثال، يقوم المكون بتكرار العناصر باستخدام ngFor، وعند وجود فروع فرعية (subnodes)، يتم استدعاء نفس المكون بشكل متكرر بواسطة
لتكرار الهيكل بشكل تكراري.
لدمج هذا المكون في تطبيق Angular، يجب عليك تضمينه في وحدة التطبيق واستخدامه في القالب الخاص بك بشكل مناسب.
typescriptimport { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
Angular 2 JSON Tree
`,
})
export class AppComponent {
jsonTreeData = [
{ name: "parent1", subnodes: [] },
{
name: "parent2",
subnodes: [{ name: "parent2_child1", subnodes: [] }],
},
{
name: "parent3",
subnodes: [
{
name: "parent3_child1",
subnodes: [{ name: "parent3_child1_child1", subnodes: [] }],
},
],
},
];
}
تذكر أن يتم استيراد واستخدام JsonTreeComponent
في وحدة التطبيق الخاصة بك.
باستخدام هذا الحلا، يمكنك تحقيق تحويل JSON إلى قائمة غير مرتبة باستخدام تقنيات Angular 2 الحديثة والفعّالة.
المزيد من المعلومات
بالطبع، دعونا نوسع على الحلا السابق بمزيد من المعلومات حول كيفية تخصيص المكون وتحسين أدائه، بالإضافة إلى بعض النصائح الإضافية لتحسين تجربة المستخدم:
-
تخصيص المكون:
يمكنك تحسين المظهر والسلوك الخاص بالمكون عن طريق إضافة المزيد من السمات والأساليب الخاصة به. يمكنك أيضًا تضمين رموز أيقونات أو ألوان لتحسين تمثيل البيانات.typescript@Component({ selector: 'json-tree', template: `
-
{{ node.name }}
-
{{ node.name }}
-
تحسين الأداء:
قد يكون لديك بيانات كبيرة، لذا يمكن تحسين الأداء باستخدام “تحميل التأخير” (Lazy Loading)، حيث يتم تحميل الفروع الفرعية فقط عند الطلب. يمكنك أيضًا استخدامtrackBy
معngFor
لتحسين أداء القائمة.typescript@Component({ // ... (الجزء الآخر من المكون) }) export class JsonTreeComponent { @Input() nodes: any[]; trackByFn(index: number, item: any): any { return item.name; // يمكنك استخدام معرف فريد هنا } }
html<json-tree [nodes]="jsonTreeData" (activate)="onNodeActivated($event)">json-tree>
-
إضافة تفاعل المستخدم:
يمكنك تحسين تجربة المستخدم عن طريق إضافة تفاعلات، مثل إطوار الانتقال أو عرض معلومات إضافية عند النقر على العناصر. يمكنك إضافة مصفوفة إشارات (Event Emitters) للتفاعل مع العناصر في التكوين.typescript@Component({ // ... (الجزء الآخر من المكون) outputs: ['activate'], }) export class JsonTreeComponent { @Input() nodes: any[]; @Output() activate: EventEmitter<any> = new EventEmitter(); onNodeClick(node: any): void { this.activate.emit(node); } }
html<li *ngFor="let node of nodes" (click)="onNodeClick(node)"> li>
باستخدام هذه الإضافات والتحسينات، يمكنك تكامل المكون بشكل أفضل في تطبيق Angular الخاص بك وتحسين تجربة المستخدم وأداء التطبيق.