src/app/mail/list/list.component.ts
| selector | app-mail-list |
| styleUrls | ./list.component.scss |
| templateUrl | ./list.component.html |
Properties |
Methods |
Inputs |
Outputs |
Accessors |
constructor()
|
|
Defined in src/app/mail/list/list.component.ts:28
|
| mails | |
|
Defined in src/app/mail/list/list.component.ts:23
|
|
| onOpenMailDetial | |
Type : EventEmitter
|
|
|
Defined in src/app/mail/list/list.component.ts:26
|
|
| isAllSelected |
isAllSelected()
|
|
Defined in src/app/mail/list/list.component.ts:34
|
|
Returns :
boolean
|
| masterToggle |
masterToggle()
|
|
Defined in src/app/mail/list/list.component.ts:40
|
|
Returns :
void
|
| ngOnInit |
ngOnInit()
|
|
Defined in src/app/mail/list/list.component.ts:32
|
|
Returns :
void
|
| rowSelection | ||||
rowSelection(row)
|
||||
|
Defined in src/app/mail/list/list.component.ts:46
|
||||
|
Parameters :
Returns :
void
|
| dataSource |
Type : any
|
Default value : new MatTableDataSource([])
|
|
Defined in src/app/mail/list/list.component.ts:19
|
| displayedColumns |
Type : string[]
|
Default value : ['select', 'star', 'name', 'subject', 'when']
|
|
Defined in src/app/mail/list/list.component.ts:18
|
| paginator |
Type : MatPaginator
|
Decorators :
@ViewChild(MatPaginator, {static: false})
|
|
Defined in src/app/mail/list/list.component.ts:28
|
| selection |
Default value : new SelectionModel(true, [])
|
|
Defined in src/app/mail/list/list.component.ts:20
|
| mails | ||||
setmails(val)
|
||||
|
Defined in src/app/mail/list/list.component.ts:23
|
||||
|
Parameters :
Returns :
void
|
import {
Component,
Input,
Output,
EventEmitter,
OnInit,
ViewChild
} from '@angular/core';
import { MatPaginator, MatTableDataSource } from '@angular/material';
import { SelectionModel, DataSource } from '@angular/cdk/collections';
@Component({
selector: 'app-mail-list',
templateUrl: './list.component.html',
styleUrls: ['./list.component.scss']
})
export class ListComponent implements OnInit {
displayedColumns: string[] = ['select', 'star', 'name', 'subject', 'when'];
dataSource: any = new MatTableDataSource([]);
selection = new SelectionModel(true, []);
@Input()
set mails(val) {
this.dataSource = new MatTableDataSource(val);
}
@Output() onOpenMailDetial = new EventEmitter();
@ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;
constructor() { }
ngOnInit() { }
isAllSelected() {
const numSelected = this.selection.selected.length;
const numRows = this.dataSource.data.length;
return numSelected === numRows;
}
masterToggle() {
this.isAllSelected()
? this.selection.clear()
: this.dataSource.data.forEach(row => this.selection.select(row));
}
rowSelection(row) {
console.log(row);
this.onOpenMailDetial.emit(row);
}
}
<div class="list">
<div class="table-container">
<table class="table-hover" mat-table [dataSource]="dataSource">
<ng-container matColumnDef="select" sticky>
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox
(change)="$event ? masterToggle() : null"
[checked]="selection.hasValue() && isAllSelected()"
[indeterminate]="selection.hasValue() && !isAllSelected()"
>
</mat-checkbox>
</th>
<td mat-cell *matCellDef="let row">
<mat-checkbox
(click)="$event.stopPropagation()"
(change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)"
>
</mat-checkbox>
</td>
</ng-container>
<ng-container matColumnDef="star">
<th mat-header-cell *matHeaderCellDef>star</th>
<td mat-cell *matCellDef="let element">
<mat-icon
class="star"
*ngIf="!element.starred"
(click)="$event.stopPropagation()"
>star_border</mat-icon
>
<mat-icon
class="star active"
*ngIf="element.starred"
(click)="$event.stopPropagation()"
>star</mat-icon
>
</td>
</ng-container>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>name</th>
<td mat-cell *matCellDef="let element">{{ element.from.name }}</td>
</ng-container>
<ng-container matColumnDef="subject">
<th mat-header-cell *matHeaderCellDef>subject</th>
<td mat-cell *matCellDef="let element">{{ element.subject }}</td>
</ng-container>
<ng-container matColumnDef="when" stickyEnd>
<th mat-header-cell *matHeaderCellDef>when</th>
<td mat-cell *matCellDef="let element">{{ element.when }}</td>
</ng-container>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns"
(click)="rowSelection(row)"
></tr>
</table>
</div>
<div
class="no-mails"
fxLayout="column"
fxLayoutAlign="start center"
*ngIf="dataSource?.data.length === 0"
>
没有邮件
</div>
</div>
./list.component.scss
$color__inactive: #616161;
$color__primary: #3f51b5;
$color__read: #9f9f9f;
.table-container {
position: relative;
overflow: auto;
}
table {
width: 100%;
}
.mat-column-select {
width: 24px;
}
.mat-column-star {
width: 40px;
text-align: center;
}
.mat-column-name {
max-width: 120px;
padding-left: 12px;
}
.mat-column-when {
width: 110px;
text-align: right;
}
.no-mails {
margin-top: 16px;
font-size: 18px;
}