[1] sticky - header
<h1>Angular Material Table Sticky Header Example - ItSolutionStuff.com</h1>
<div class="example-container mat-elevation-z8">
<table mat-table [dataSource]="data" class="mat-elevation-z8">
<!--- Note that these columns can be defined in any order.
The actual rendered columns are set as a property on the row definition" -->
<!-- ID Column -->
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> ID </th>
<td mat-cell *matCellDef="let element"> {{element.id}} </td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> Name </th>
<td mat-cell *matCellDef="let element"> {{element.name}} </td>
</ng-container>
<!-- Email Column -->
<ng-container matColumnDef="email">
<th mat-header-cell *matHeaderCellDef> Email </th>
<td mat-cell *matCellDef="let element"> {{element.email}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
</div>
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
HTML 템플릿 부분 *matHeaderRowDef에 위와 같이 "stick: true"값을 할당해주면 된다.
table {
width: 100%;
}
.example-container {
height: 400px;
max-width: 100%;
overflow: auto;
그리고 table을 감싸는 container에게 높이, overflow 값을 반드시 넣어줘야 스크롤이 생길 수 있다.
[2] sticky - column
<div class="example-container mat-elevation-z8">
<table mat-table [dataSource]="dataSource">
<!-- Name Column -->
<ng-container matColumnDef="name" sticky>
<th mat-header-cell *matHeaderCellDef> Name </th>
<td mat-cell *matCellDef="let element"> {{element.name}} </td>
</ng-container>
<!-- Position Column -->
<ng-container matColumnDef="position">
<th mat-header-cell *matHeaderCellDef> No. </th>
<td mat-cell *matCellDef="let element"> {{element.position}} </td>
</ng-container>
<!-- Weight Column -->
<ng-container matColumnDef="weight">
<th mat-header-cell *matHeaderCellDef> Weight </th>
<td mat-cell *matCellDef="let element"> {{element.weight}} </td>
</ng-container>
<!-- Symbol Column -->
<ng-container matColumnDef="symbol">
<th mat-header-cell *matHeaderCellDef> Symbol </th>
<td mat-cell *matCellDef="let element"> {{element.symbol}} </td>
</ng-container>
<!-- Star Column -->
<ng-container matColumnDef="star" stickyEnd>
<th mat-header-cell *matHeaderCellDef></th>
<td mat-cell *matCellDef="let element">
<mat-icon>more_vert</mat-icon>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
</div>
위와 같이 matColumnDef 최초 시작 부분에 "stick"를 넣어주고, matColumnDef 제일 마지막에 "stickyEnd"를 넣어주면 된다.
결국 개발자 도구를 열어 sticky되는 부분을 살펴보면 th 또는 td에 "position: sticky"가 붙음으로써 sticky가 되는 것이었다.
'Angular.js' 카테고리의 다른 글
[Angular] ChangeDetectionStrategy & ChangeDetectorRef (0) | 2023.01.20 |
---|---|
[Angular] 앵귤러의 decorators, 데코레이터 -ing (0) | 2023.01.20 |
[Angular] Async Pipe (0) | 2023.01.19 |
[Angular] 참조변수 또는 템플릿 변수 (feat. ViewChild) (0) | 2023.01.11 |
[Angular] 서버에서 데이터 받아오기 (HttpClient, Observable) (0) | 2023.01.10 |
댓글