File

src/app/mail/list/list.component.ts

Implements

OnInit

Metadata

selector app-mail-list
styleUrls ./list.component.scss
templateUrl ./list.component.html

Index

Properties
Methods
Inputs
Outputs
Accessors

Constructor

constructor()

Inputs

mails

Outputs

onOpenMailDetial
Type : EventEmitter

Methods

isAllSelected
isAllSelected()
Returns : boolean
masterToggle
masterToggle()
Returns : void
ngOnInit
ngOnInit()
Returns : void
rowSelection
rowSelection(row)
Parameters :
Name Optional
row No
Returns : void

Properties

dataSource
Type : any
Default value : new MatTableDataSource([])
displayedColumns
Type : string[]
Default value : ['select', 'star', 'name', 'subject', 'when']
paginator
Type : MatPaginator
Decorators :
@ViewChild(MatPaginator, {static: false})
selection
Default value : new SelectionModel(true, [])

Accessors

mails
setmails(val)
Parameters :
Name Optional
val No
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;
}
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""