How to use material2 data table

前端 未结 4 683
遥遥无期
遥遥无期 2020-12-05 05:08

I am trying to implement Material2 data table. But I am not able to understand how to use it in proper way.

i         


        
4条回答
  •  星月不相逢
    2020-12-05 05:16

    Here is the customized code created for view attendance, right now i have hard coded the data , you can call service instead of that for getting dynamic data.

    app.component.ts

    import { Component, OnInit, ElementRef, ViewEncapsulation, ViewChild } from '@angular/core';
    import { DataSource } from '@angular/cdk';
    import { BehaviorSubject } from 'rxjs/BehaviorSubject';
    import { Observable } from 'rxjs/Observable';
    import { MdPaginator, MdSort } from '@angular/material';
    import 'rxjs/add/operator/startWith';
    import 'rxjs/add/observable/merge';
    import 'rxjs/add/operator/map';
    declare let d3: any;
    
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    
    
    export class AppComponent implements OnInit {
    
      displayedColumns = ['shiftDate', 'swipeIn', 'swipeOut', 'duration', 'status'];
      exampleDatabase = new ExampleDatabase();
      dataSource: ExampleDataSource | null;
    
      @ViewChild(MdPaginator) paginator: MdPaginator;
      @ViewChild(MdSort) sort: MdSort;
    
      ngOnInit() {
        this.dataSource = new ExampleDataSource(this.exampleDatabase, this.paginator, this.sort);
      }
    }
    
    export interface attendanceData {
      shiftDate: string;
      swipeIn: string;
      swipeOut: string;
      duration: string;
      status: string;
    }
    
    
    /** An example database that the data source uses to retrieve data for the table. */
    export class ExampleDatabase {
      /** Stream that emits whenever the data has been modified. */
      dataChange: BehaviorSubject = new BehaviorSubject([]);
      get data(): attendanceData[] {
    
        let data = [
          {
            "shiftDate": "17-July-2017",
            "swipeIn": "10:00 AM",
            "swipeOut": "06:00 PM",
            "duration": "8 Hours",
            "status": "PRESENT"
    
          },
          {
            "shiftDate": "16-July-2017",
            "swipeIn": "9:00 AM",
            "swipeOut": "5:00 AM",
            "duration": "7 Hours",
            "status": "PRESENT"
          }
    
        ];
    
        return data;
      }
    
      constructor() {
    
        this.dataChange.next(this.data);
      }
    
    }
    
    export class ExampleDataSource extends DataSource {
      _filterChange = new BehaviorSubject('');
      get filter(): string { return this._filterChange.value; }
      set filter(filter: string) { this._filterChange.next(filter); }
    
      constructor(private _exampleDatabase: ExampleDatabase, private _paginator: MdPaginator, private _sort: MdSort) {
        super();
      }
    
      /** Connect function called by the table to retrieve one stream containing the data to render. */
      connect(): Observable {
        const displayDataChanges = [
          this._exampleDatabase.dataChange,
          this._paginator.page,
          this._sort.mdSortChange
        ];
    
        return Observable.merge(...displayDataChanges).map(() => {
          // const data = this._exampleDatabase.data.slice();
          const data = this.getSortedData();
          // Grab the page's slice of data.
          const startIndex = this._paginator.pageIndex * this._paginator.pageSize;
          return data.splice(startIndex, this._paginator.pageSize);
        });
      }
    
      disconnect() { }
    
      getSortedData(): attendanceData[] {
        const data = this._exampleDatabase.data.slice();
        if (!this._sort.active || this._sort.direction == '') { return data; }
    
        return data.sort((a, b) => {
          let propertyA: number | string = '';
          let propertyB: number | string = '';
    
          switch (this._sort.active) {
            case 'shiftDate': [propertyA, propertyB] = [a.shiftDate, b.shiftDate]; break;
            case 'swipeIn': [propertyA, propertyB] = [a.swipeIn, b.swipeIn]; break;
            case 'swipeOut': [propertyA, propertyB] = [a.swipeOut, b.swipeOut]; break;
            case 'duration': [propertyA, propertyB] = [a.duration, b.duration]; break;
          }
    
          let valueA = isNaN(+propertyA) ? propertyA : +propertyA;
          let valueB = isNaN(+propertyB) ? propertyB : +propertyB;
    
          return (valueA < valueB ? -1 : 1) * (this._sort.direction == 'asc' ? 1 : -1);
        });
      }
    }
    

    app.component.html

    Shift Date {{row.shiftDate}} Swipe In {{row.swipeIn}}% Swipe Out {{row.swipeOut}} Duration {{row.duration}} Status {{row.status}}

    app.module.ts

    import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
    import { BrowserModule } from '@angular/platform-browser';
    import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
    import { NgModule } from '@angular/core';
    import { MaterialModule, MdTableModule  } from '@angular/material';
    import { FlexLayoutModule } from '@angular/flex-layout';
    import { CdkTableModule } from '@angular/cdk';
    
    
    import { AppComponent } from './app.component';
    
    
    
    @NgModule({
      declarations: [
        AppComponent,
      ],
      imports: [
        BrowserAnimationsModule,
        CdkTableModule,
        BrowserModule,
        MaterialModule, MdTableModule,
        FlexLayoutModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    

提交回复
热议问题