ใช้วัสดุเชิงมุมเพื่อสร้างตารางทางสถิติ
ติดตั้ง Angular Material เครื่องมือพัฒนาส่วนประกอบ (CDK) และไลบรารีแอนิเมชั่น Angular และเรียกใช้แผนผังโค้ด
ng เพิ่ม @ เชิงมุม/
แผนผังตารางวัสดุเพื่อสร้างส่วนประกอบที่สามารถแสดงผลการจัดเรียงที่ตั้งล่วงหน้าได้ วัสดุเชิงมุมสำหรับ แหล่งข้อมูลเพจได้ [คำแนะนำบทช่วยสอนที่เกี่ยวข้อง: "บทช่วยสอนเชิงมุม"]
ng สร้าง @ เชิงมุม/วัสดุ: ตาราง texe1
แล้วแก้ไขตามสิ่งนี้
ไฟล์ html ขององค์ประกอบ
<div class="mat-elevation-z8"> <table mat-table class = "เต็มความกว้างตาราง" matSort aria-label = "องค์ประกอบ"> <!-- คอลัมน์รหัส --> <ng-คอนเทนเนอร์ matColumnDef="id"> <th mat-header-cell *matHeaderCellDef mat-sort-header>หมายเลขซีเรียล</th> <td mat-cell *matCellDef="let row">{{row.id}}</td> </ng-ภาชนะ> <!-- คอลัมน์ชื่อ --> <ng-คอนเทนเนอร์ matColumnDef="ชื่อ"> <th mat-header-cell *matHeaderCellDef mat-sort-header> ชื่อหินและดิน</th> <td mat-cell *matCellDef="let row">{{row.name}}</td> </ng-ภาชนะ> <!-- คอลัมน์ num1 --> <ng-คอนเทนเนอร์ matColumnDef="num1"> <th mat-header-cell *matHeaderCellDef mat-sort-header> ปริมาณที่คาดหวัง</th> <td mat-cell *matCellDef="let row">{{row.num1}}</td> </ng-ภาชนะ> <!-- คอลัมน์ num2 --> <ng-คอนเทนเนอร์ matColumnDef="num2"> <th mat-header-cell *matHeaderCellDef mat-sort-header> หมายเลขปัจจุบัน</th> <td mat-cell *matCellDef="let row">{{row.num2}}</td> </ng-ภาชนะ> <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> <tr mat-row *matRowDef="let row; columns: displaysColumns;"></tr> </ตาราง> <!-- ควบคุมความยาวของการแสดงข้อมูลตาราง--> <mat-paginator #paginator [length]="dataSource?.data?.length" [ดัชนีหน้า]="0" [ขนาดหน้า]="10" [pageSizeOptions]="[5, 10, 17]" aria-label = "เลือกหน้า"> </mat-paginator> </div>
ไฟล์ texe1-datasource.ts ของคอมโพเนนต์
นำเข้า { DataSource } จาก '@angular/cdk/collections'; นำเข้า { MatPaginator } จาก '@ เชิงมุม/วัสดุ/paginator'; นำเข้า { MatSort } จาก '@ เชิงมุม/วัสดุ/sort'; นำเข้า { map } จาก 'rxjs/operators'; นำเข้า { สังเกตได้ จากที่สังเกตได้ ผสาน } จาก 'rxjs'; // สิ่งที่ต้องทำ: แทนที่สิ่งนี้ด้วยประเภทโมเดลข้อมูลของคุณเอง ส่งออกอินเทอร์เฟซ Texe1Item { ชื่อ: สตริง; รหัส: หมายเลข; num1: หมายเลข; num2: หมายเลข; - // สิ่งที่ต้องทำ: แทนที่สิ่งนี้ด้วยข้อมูลจริงจากแอปพลิเคชันของคุณ const EXAMPLE_DATA: Texe1Item[] = [ {id: 1 ชื่อ: 'ดินเหนียวปนทราย', num1:1000, num2:100,}, {id: 2 ชื่อ: 'ดินเหนียวปนทราย', num1:1000, num2:100,}, {id: 3 ชื่อ: 'ดินเหนียว', num1:1000, num2:100,}, {id: 4 ชื่อ: 'ดินเหนียว', num1:1000, num2:100,}, {id: 5 ชื่อ: 'ดินเหนียวปนทราย', num1:1000, num2:100,}, {id: 6 ชื่อ: 'เบรชเซีย (เบรชเซีย)', num1:1000, num2:100,}, {id: 7 ชื่อ: '中沙', num1:1000, num2:1000,}, {id: 8 ชื่อ: 'ดินอินทรีย์', num1:1000, num2:100,}, {id: 9 ชื่อ: 'ดินพรุ A', num1:1000, num2:100,}, {id: 10 ชื่อ: 'ดินพรุ B', num1:1000, num2:100,}, {id: 11 ชื่อ: 'ทรายตะกอน', num1:1000, num2:100,}, {id: 12 ชื่อ: 'ทรายตะกอน', num1:1000, num2:100,}, {id: 13 ชื่อ: 'ทรายละเอียด', num1:1000, num2:100,}, {id: 14 ชื่อ: 'ทรายหยาบ', num1:1000, num2:100,}, {id: 15 ชื่อ: 'กรวด', num1:1000, num2:100,}, {id: 16 ชื่อ: 'กรวด (กรวด)', num1:1000, num2:100,}, {id: 17 ชื่อ: 'โบลเดอร์ (โบลเดอร์)', num1:1000, num2:100,}, - - * แหล่งข้อมูลสำหรับมุมมอง Texe1 คลาสนี้ควร * สรุปตรรกะทั้งหมดสำหรับการดึงและจัดการข้อมูลที่แสดง * (รวมถึงการเรียงลำดับ การแบ่งหน้า และการกรอง) - คลาสส่งออก Texe1DataSource ขยาย DataSource<Texe1Item> { ข้อมูล: Texe1Item[] = EXAMPLE_DATA; เลขหน้า: MatPaginator | . ไม่ได้กำหนด; เรียงลำดับ: MatSort | . ไม่ได้กำหนด; ตัวสร้าง () { ซุปเปอร์(); - - * เชื่อมต่อแหล่งข้อมูลนี้เข้ากับตาราง ตารางจะอัปเดตเมื่อเท่านั้น * สตรีมที่ส่งคืนปล่อยรายการใหม่ * @returns กระแสของรายการที่จะแสดงผล - เชื่อมต่อ (): สังเกตได้ <Texe1Item[]> { ถ้า (this.paginator && this.sort) { // รวมทุกอย่างที่ส่งผลต่อข้อมูลที่แสดงผลไว้ในการอัปเดตเดียว // สตรีมเพื่อให้ตารางข้อมูลใช้งาน ส่งคืนการผสาน (observableOf (this.data), this.paginator.page, this.sort.sortChange) .pipe(แผนที่(() => { return this.getPagedData(this.getSortedData([...this.data ])); - } อื่น { Throw Error('กรุณาตั้งค่าตัวแบ่งหน้าและเรียงลำดับแหล่งข้อมูลก่อนเชื่อมต่อ'); - - - * เรียกเมื่อโต๊ะถูกทำลาย ใช้ฟังก์ชันนี้เพื่อทำความสะอาด * การเชื่อมต่อแบบเปิดใด ๆ หรือปล่อยทรัพยากรใด ๆ ที่เก็บไว้ซึ่งถูกตั้งค่าระหว่างการเชื่อมต่อ - ตัดการเชื่อมต่อ (): เป็นโมฆะ {} - * แบ่งหน้าข้อมูล (ฝั่งไคลเอ็นต์) หากคุณใช้การแบ่งหน้าฝั่งเซิร์ฟเวอร์ * สิ่งนี้จะถูกแทนที่ด้วยการขอข้อมูลที่เหมาะสมจากเซิร์ฟเวอร์ - getPagedData ส่วนตัว (ข้อมูล: Texe1Item []): Texe1Item [] { ถ้า (this.paginator) { const startIndex = this.paginator.pageIndex * this.paginator.pageSize; กลับ data.splice (startIndex, this.paginator.pageSize); } อื่น { ส่งคืนข้อมูล - - - * จัดเรียงข้อมูล (ฝั่งไคลเอ็นต์) หากคุณใช้การเรียงลำดับฝั่งเซิร์ฟเวอร์ * สิ่งนี้จะถูกแทนที่ด้วยการขอข้อมูลที่เหมาะสมจากเซิร์ฟเวอร์ - getSortedData ส่วนตัว (ข้อมูล: Texe1Item []): Texe1Item [] { ถ้า (!this.sort || !this.sort.active || this.sort.direction === '') { ส่งคืนข้อมูล - กลับ data.sort ((a, b) => { const isAsc = this.sort?.direction === 'asc'; สวิตช์ (this.sort?.active) { กรณี 'ชื่อ': กลับเปรียบเทียบ (a.name, b.name, isAsc); case 'id': return comparison(+a.id, +b.id, isAsc); ค่าเริ่มต้น: กลับ 0; - - - - /** ตัวเปรียบเทียบการเรียงลำดับอย่างง่ายสำหรับตัวอย่างคอลัมน์ ID/ชื่อ (สำหรับการเรียงลำดับฝั่งไคลเอ็นต์) */ ฟังก์ชั่นเปรียบเทียบ (a: string | number, b: string | number, isAsc: boolean): number { กลับ (a < b ? -1 : 1) * (isAsc ? 1 : -1); }นำเข้า
ไฟล์ texe1.component.ts ของส่วนประกอบ
{ AfterViewInit, Component, ViewChild } จาก '@ เชิงมุม/core'; นำเข้า { MatPaginator } จาก '@ เชิงมุม/วัสดุ/paginator'; นำเข้า { MatSort } จาก '@ เชิงมุม/วัสดุ/sort'; นำเข้า { MatTable } จาก '@ เชิงมุม/วัสดุ/ตาราง'; นำเข้า { Texe1DataSource, Texe1Item } จาก './texe1-datasource'; @ส่วนประกอบ({ ตัวเลือก: 'app-texe1', templateUrl: './texe1.component.html', styleUrls: ['./texe1.component.css'] - คลาสส่งออก Texe1Component ใช้ AfterViewInit { @ViewChild(MatPaginator) ตัวแบ่งหน้า!: MatPaginator; @ViewChild(MatSort) เรียงลำดับ!: MatSort; @ViewChild(MatTable) ตาราง!: MatTable<Texe1Item>; แหล่งข้อมูล: Texe1DataSource; /** คอลัมน์ที่แสดงในตารางสามารถเพิ่ม ลบ หรือเรียงลำดับใหม่ได้ */ displaysColumns = ['id', 'ชื่อ','num1','num2']; ตัวสร้าง () { this.dataSource = Texe1DataSource ใหม่ (); - ngAfterViewInit(): เป็นโมฆะ { this.dataSource.sort = นี้.เรียงลำดับ; this.dataSource.paginator = this.paginator; this.table.dataSource = this.dataSource; - }
สุดท้ายจะแสดงในไฟล์ app.component.html
<app-texe1></app-texe1>
การแสดงผล: