File

src/app/apm/error/error.component.ts

Implements

OnInit

Metadata

selector app-error
styleUrls ./error.component.scss
templateUrl ./error.component.html

Index

Properties
Methods
HostListeners

Constructor

constructor(_elementRef: ElementRef, service: ErrorService)
Parameters :
Name Type Optional
_elementRef ElementRef No
service ErrorService No

HostListeners

document:click
Arguments : '$event' '$event.target'
document:click(event: MouseEvent, targetElement: HTMLElement)

Methods

isAllSelected
isAllSelected()
Returns : boolean
masterToggle
masterToggle()
Returns : void
ngOnInit
ngOnInit()
Returns : void
onOpenedTriggered
onOpenedTriggered(opened)
Parameters :
Name Optional
opened No
Returns : void
onSearchTriggered
onSearchTriggered(value)
Parameters :
Name Optional
value No
Returns : void
rowSelection
rowSelection(row, event)
Parameters :
Name Optional
row No
event No
Returns : void

Properties

dataSource
Default value : new MatTableDataSource([])
displayedColumns
Type : string[]
Default value : [ 'select', 'firstSeen', 'src', 'type', 'releaseStages', 'star' ]
openDetail
Type : boolean
Default value : false
selection
Default value : new SelectionModel(true, [])
import { Component, OnInit, HostListener, ElementRef } from '@angular/core';
import { SelectionModel } from '@angular/cdk/collections';
import { MatTableDataSource } from '@angular/material';
import { ErrorService } from './error.service';

@Component({
  selector: 'app-error',
  templateUrl: './error.component.html',
  styleUrls: ['./error.component.scss']
})
export class ErrorComponent implements OnInit {
  displayedColumns: string[] = [
    'select',
    'firstSeen',
    'src',
    'type',
    'releaseStages',
    'star'
  ];

  dataSource = new MatTableDataSource([]);
  selection = new SelectionModel(true, []);

  openDetail: boolean = false;

  @HostListener('document:click', ['$event', '$event.target'])
  onClick(event: MouseEvent, targetElement: HTMLElement) {
    if (!targetElement) {
      return;
    }

    const clickedInside = this._elementRef.nativeElement.contains(
      targetElement
    );
    if (!clickedInside && this.openDetail === true) {
      this.openDetail = false;
    }
  }

  constructor(private _elementRef: ElementRef, private service: ErrorService) {}

  ngOnInit() {
    this.service.getList().subscribe(res => {
      this.dataSource = new MatTableDataSource(res);
    });
  }

  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, event) {
    this.selection.toggle(row);
    this.openDetail = true;
  }

  onOpenedTriggered(opened) {
    this.openDetail = opened;
  }

  onSearchTriggered(value) {
    console.log(value);
  }
}
<stbui-search
  placeholder="输入过滤条件"
  class="mat-elevation-z4 m-b-16"
  (onSearch)="onSearchTriggered($event)"
></stbui-search>

<div class="mat-elevation-z4">
  <table mat-table [dataSource]="dataSource">
    <ng-container matColumnDef="select">
      <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="firstSeen">
      <th mat-header-cell *matHeaderCellDef>发生时间</th>
      <td mat-cell *matCellDef="let element">
        {{ element.firstSeen | date: 'yyyy-MM-dd hh:mm:ss' }}
      </td>
    </ng-container>

    <ng-container matColumnDef="src">
      <th mat-header-cell *matHeaderCellDef>资源URL</th>
      <td mat-cell *matCellDef="let element">{{ element.src }}</td>
    </ng-container>

    <ng-container matColumnDef="type">
      <th mat-header-cell *matHeaderCellDef>事件类型</th>
      <td mat-cell *matCellDef="let element">{{ element.type }}</td>
    </ng-container>

    <ng-container matColumnDef="releaseStages">
      <th mat-header-cell *matHeaderCellDef>版本</th>
      <td mat-cell *matCellDef="let element">{{ element.releaseStages }}</td>
    </ng-container>

    <ng-container matColumnDef="star" stickyEnd>
      <th mat-header-cell *matHeaderCellDef>操作</th>
      <td mat-cell *matCellDef="let element">详情</td>
    </ng-container>

    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
    <tr
      mat-row
      *matRowDef="let row; columns: displayedColumns"
      (click)="rowSelection(row, $event)"
    ></tr>
  </table>
</div>

<error-detail
  [opened]="openDetail"
  (onOpened)="onOpenedTriggered($event)"
></error-detail>

./error.component.scss

:host {
  display: block;
  margin: 24px;
}

table {
  width: 100%;
}
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""