استخدم angular Material لإنشاء جداول إحصائية.
قم بتثبيت Angular Material وأداة تطوير المكونات (CDK) ومكتبة الرسوم المتحركة Angular، وقم بتشغيل الكود التخطيطي
ng add @angular/material
table schematic لإنشاء مكون يمكنه تقديم مادة Angular قابلة للفرز مسبقًا لـ مصادر البيانات القابلة للصفحات. [توصية البرنامج التعليمي ذات الصلة: "البرنامج التعليمي الزاوي"]
قم بإنشاء @angular/material:table texe1
ثم قم بتعديله بناءً على ذلك.
ملف html الخاص بالمكون
<div class="mat-elevation-z8"> <جدول حصيرة الجدول فئة = "جدول كامل العرض" ماتفرز aria-label = "العناصر"> <!-- عمود المعرف --> <ng-container matColumnDef="id"> <th mat-header-cell *matHeaderCellDef mat-sort-header>الرقم التسلسلي</th> <td mat-cell *matCellDef="letrow">{{row.id}}</td> </ng-container> <!-- عمود الاسم --> <ng-container matColumnDef="name"> <th mat-header-cell *matHeaderCellDef mat-sort-header> اسم الصخور والتربة</th> <td mat-cell *matCellDef="letrow">{{row.name}}</td> </ng-container> <!-- العمود رقم 1 --> <ng-container matColumnDef="num1"> <th mat-header-cell *matHeaderCellDef mat-sort-header> الكمية المتوقعة</th> <td mat-cell *matCellDef="letrow">{{row.num1}}</td> </ng-container> <!-- العمود رقم 2 --> <ng-container matColumnDef="num2"> <th mat-header-cell *matHeaderCellDef mat-sort-header> الرقم الحالي</th> <td mat-cell *matCellDef="letrow">{{row.num2}}</td> </ng-container> <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> <tr mat-row *matRowDef="let Row; الأعمدة: DisplayColumns;"></tr> </الجدول> <!-- التحكم في طول عرض بيانات الجدول--> <mat-paginator #paginator [طول]="مصدر البيانات?.البيانات?.الطول" [pageIndex]="0" [حجم الصفحة]="10" [pageSizeOptions]="[5، 10، 17]" aria-label = "اختر صفحة"> </mat-paginator> </div>استيراد
ملف texe1-datasource.ts للمكون
{ DataSource } من '@angular/cdk/collections'؛ استيراد { MatPaginator } من '@angular/material/paginator'؛ استيراد { MatSort } من '@angular/material/sort'؛ استيراد {خريطة} من 'rxjs/operators'؛ استيراد { يمكن ملاحظته، كما يمكن ملاحظته، دمج } من 'rxjs'؛ // TODO: استبدل هذا بنوع نموذج البيانات الخاص بك واجهة التصدير Texe1Item { الاسم: سلسلة؛ المعرف: رقم؛ رقم 1: رقم؛ رقم 2: رقم؛ } // TODO: استبدل هذا ببيانات حقيقية من تطبيقك const EXAMPLE_DATA: Texe1Item[] = [ {المعرف: 1، الاسم: 'الطين الغريني'، العدد1:1000، العدد2:100،}، {المعرف: 2، الاسم: 'الطين الغريني الغريني'، رقم1:1000، رقم2:100،}، {المعرف: 3، الاسم: 'طين'، رقم 1: 1000، رقم 2: 100،}، {المعرف: 4، الاسم: 'طمي طين'، num1:1000، num2:100،}، {المعرف: 5، الاسم: 'الطين الغريني'، عدد1:1000، عدد2:100،}، {المعرف: 6، الاسم: 'بريشيا (بريشيا)'، num1:1000، num2:100،}، {المعرف: 7، الاسم: '中沙'، num1:1000، num2:1000،}، {المعرف: 8، الاسم: 'تربة عضوية'، رقم 1: 1000، رقم 2: 100،}، {المعرف: 9، الاسم: 'تربة الخث A'، num1:1000، num2:100،}، {المعرف: 10، الاسم: 'تربة الخث ب'، num1:1000، num2:100،}، {المعرف: 11، الاسم: 'الطمي الرملي'، num1:1000، num2:100،}، {المعرف: 12، الاسم: 'رمل الطمي'، رقم1:1000، رقم2:100،}، {المعرف: 13، الاسم: 'الرمال الناعمة'، العدد1:1000، العدد2:100،}، {المعرف: 14، الاسم: 'الرمال الخشنة'، رقم1:1000، رقم2:100،}، {المعرف: 15، الاسم: 'الحصى'، num1:1000، num2:100،}، {المعرف: 16، الاسم: 'حصاة (حصى)'، num1:1000، num2:100،}، {المعرف: 17، الاسم: 'بولدر (بولدر)'، num1:1000، num2:100،}، ]; /** * يجب أن يكون مصدر البيانات لعرض Texe1 * تغليف كل المنطق لجلب البيانات المعروضة ومعالجتها * (بما في ذلك الفرز، وترقيم الصفحات، والتصفية). */ فئة التصدير Texe1DataSource تمتد DataSource<Texe1Item> { البيانات: Texe1Item[] = EXAMPLE_DATA; مرقّم الصفحات: MatPaginator |. الترتيب: ماتسورت |. منشئ () { ممتاز()؛ } /** * قم بتوصيل مصدر البيانات هذا بالجدول. سيتم تحديث الجدول فقط عندما * يُصدر الدفق المرتجع عناصر جديدة. * @returns دفق من العناصر التي سيتم تقديمها. */ الاتصال (): يمكن ملاحظته <Texe1Item[]> { إذا (this.paginator && this.sort) { // اجمع كل ما يؤثر على البيانات المقدمة في تحديث واحد // دفق لاستهلاك جدول البيانات. إرجاع الدمج (observableOf(this.data)، this.paginator.page، this.sort.sortChange) .pipe(map(() => { return this.getPagedData(this.getSortedData([...this.data ])); })); } آخر { throw Error('يرجى ضبط مرقّم الصفحات والفرز على مصدر البيانات قبل الاتصال.'); } } /** * يتم الاتصال به عند تدمير الجدول، استخدم هذه الوظيفة للتنظيف * أي اتصالات مفتوحة أو تحرير أي موارد محتجزة تم إعدادها أثناء الاتصال. */ قطع الاتصال (): باطل {} /** * ترقيم الصفحات البيانات (من جانب العميل) إذا كنت تستخدم ترقيم الصفحات من جانب الخادم، * سيتم استبدال ذلك بطلب البيانات المناسبة من الخادم. */ getPagedData الخاص (البيانات: Texe1Item[]): Texe1Item[] { إذا (هذا.المصفح) { const startIndex = this.paginator.pageIndex * this.paginator.pageSize; return data.splice(startIndex, this.paginator.pageSize); } آخر { إرجاع البيانات؛ } } /** * فرز البيانات (من جانب العميل) إذا كنت تستخدم الفرز من جانب الخادم، * سيتم استبدال ذلك بطلب البيانات المناسبة من الخادم. */ getSortedData الخاص (البيانات: Texe1Item[]): Texe1Item[] { إذا (!this.sort || !this.sort.active || this.sort.direction === '') { إرجاع البيانات؛ } إرجاع البيانات.فرز ((أ، ب) => { const isAsc = this.sort?.direction === 'asc'; التبديل (هذا.الفرز؟.نشط) { حالة 'الاسم': إرجاع المقارنة(a.name, b.name, isAsc); الحالة "معرف": إرجاع مقارنة(+a.id, +b.id, isAsc); الافتراضي: العودة 0؛ } }); } } /** مقارنة فرز بسيطة، على سبيل المثال، أعمدة المعرف/الاسم (للفرز من جانب العميل */). مقارنة الدالة (أ: سلسلة | رقم، ب: سلسلة | رقم، إيسك: منطقي): رقم { return (a < b ? -1: 1) * (isAsc ? 1 : -1); }استيراد
ملف texe1.component.ts الخاص بالمكون
{ AfterViewInit, Component, ViewChild } from '@angular/core'; استيراد { MatPaginator } من '@angular/material/paginator'؛ استيراد { MatSort } من '@angular/material/sort'؛ استيراد {MatTable} من '@angular/material/table'؛ استيراد { Texe1DataSource، Texe1Item } من './texe1-datasource'؛ @عنصر({ المحدد: "app-texe1"، templateUrl: './texe1.component.html'، styleUrls: ['./texe1.component.css'] }) فئة التصدير Texe1Component تنفذ AfterViewInit { @ViewChild(MatPaginator) مرقّم الصفحات!: MatPaginator; @ViewChild(MatSort) فرز!: MatSort; @ViewChild(MatTable) table!: MatTable<Texe1Item>; مصدر البيانات: Texe1DataSource؛ /** يمكن إضافة معرفات الأعمدة المعروضة في الجدول، أو إزالتها، أو إعادة ترتيبها. DisplayColumns = ['id', 'name','num1','num2']; منشئ () { this.dataSource = new Texe1DataSource(); } ngAfterViewInit (): باطل { this.dataSource.sort = this.sort; this.dataSource.paginator = this.paginator; this.table.dataSource = this.dataSource; } }
وأخيرًا، يتم عرضه في ملف app.component.html.
<app-texe1></app-texe1>
العرض: