2017-09-21 34 views
0

我正在使用角度材質md-table來顯示來自服務的數據。我的數據源訂閱了服務來觀察並獲取我的數據源數據庫的數據。但是這不能按預期工作。我的數據源數據始終是空數組,但我的服務正在從API中獲取數據。請查看我的代碼,並讓我知道爲什麼我的數據源數據在服務返回數據時未檢測到。MD-Table數據源數據爲空數組

import { Component, OnInit, ViewChild } from '@angular/core'; 
import { DataService } from '../core/services/data.service'; 
import { SummaryService } from './summary.service'; 
import { Summaries,SummaryDetails, SummaryDetailRequest, SummariessWithTotals } from "../models/datamodelsObj"; 
import { DataSource } from '@angular/cdk'; 
import { MdPaginator, DateAdapter, NativeDateAdapter } from '@angular/material'; 
import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/startWith'; 
import 'rxjs/add/observable/merge'; 
import 'rxjs/add/operator/map'; 

@Component({ 
    selector: 'app-positionsummary', 
    templateUrl: './position-summary.component.html', 
    styleUrls: ['./position-summary.component.scss'], 
    providers: [] 
}) 
export class PositionSummaryComponent implements OnInit { 

    displayedColumns = ['SummaryName', 'ShortDesc', 'RegTime', 'ExpTime']; 
    psDatabase = new SummaryDatabase(this.dataService, this.psService); 
    dataSource: SummaryDataSource | any;@ViewChild(MdPaginator) paginator: MdPaginator; 

    constructor(private dataService: DataService, private pagi: MdPaginator, private psService: SummaryService) { 

    } 
ngOnInit() { 
    this.psDatabase = new SummaryDatabase(this.dataService,this.psService); 
    this.dataSource = new SummaryDataSource(this.psDatabase, this.paginator); 
    console.log(this.dataSource); 
    } 
} 


export class SummaryDatabase { 
    summary: Summaries; 
    summaryDetailRequestObj: SummaryDetailRequest; 
    public dataChange: BehaviorSubject<SummaryDetails[]> = new BehaviorSubject<SummaryDetails[]>([]); 
    get data(): SummaryDetails[] { return this.dataChange.value } 
    constructor(private _dataService: DataService, private psService: SummaryService) { 
    this.getAllSummaryDetails() 
    } 

    getAllSummaryDetails() { 
    this.summaryDetailRequestObj.StartTime = "20170914"; 
    this.summaryDetailRequestObj.NodeID =this._dataService.selectedGlobalSummaryId; 
    this.psService.getSummaryDetails(this.summaryDetailRequestObj).subscribe(data => this.dataChange.next(data)); 
    } 
} 
export class SummaryDataSource extends DataSource<any> { 

    constructor(private _summaryDatabase: SummaryDatabase, private _paginator: MdPaginator) { 
    super(); 
    } 
    connect(): Observable<SummaryDetails[]> { 
    const displayDataChanges = [ 
     this._summaryDatabase.dataChange, 
     this._paginator.page 
    ]; 
    return Observable.merge(...displayDataChanges).map(() => { 
     const data = this._summaryDatabase.data.slice(); 
     console.log(data); 
     const startIndex = this._paginator.pageIndex * this._paginator.pageSize; 
     return data.splice(startIndex, this._paginator.pageSize); 
    }) 
    } 
    disconnect() { } 
} 

我的服務

export class SummaryService { 
    public actionUrl: string; 
    private headers: HttpHeaders; 

    constructor(private http: HttpClient, private configuration: Configuration) { 
     this.actionUrl = configuration.Server; 
    } 

    getSummaryDetails = (request: SummaryDetailRequest): Observable<SummaryDetails[]> => { 
     return this.http.post(this.actionUrl + '/details', request,{ headers: this.headers }) 
      .map((data: SummariesWithTotals) => { 
       return data.Values; 
      }); 
    } 
} 

我看來

<md-table #table [dataSource]="dataSource"> 

     <ng-container cdkColumnDef="SummaryName"> 
     <md-header-cell *cdkCellDef>Summary Name</md-header-cell> 
     <md-cell *cdkCellDef="let row"> {{row.Sum_Name}} </md-cell> 
     </ng-container> 

     <ng-container cdkColumnDef="ShortDesc"> 
     <md-header-cell *cdkCellDef>Short Description</md-header-cell> 
     <md-cell *cdkCellDef="let row"> {{row.ShortDesc}} </md-cell> 
     </ng-container> 

     <ng-container cdkColumnDef="RegTime"> 
     <md-header-cell *cdkCellDef>Registered Time</md-header-cell> 
     <md-cell *cdkCellDef="let row"> {{row.RegTime}} </md-cell> 
     </ng-container> 

     <ng-container cdkColumnDef="ExpTime"> 
     <md-header-cell *cdkCellDef>Expiry Time</md-header-cell> 
     <md-cell *cdkCellDef="let row"> {{row.ExpTime}} </md-cell> 
     </ng-container> 


     <md-header-row *cdkHeaderRowDef="displayedColumns"></md-header-row> 
     <md-row *cdkRowDef="let row; columns: displayedColumns;"></md-row> 

    </md-table> 

    <md-paginator #paginator 
        [length]="psDatabase.data.length" 
        [pageIndex]="0" 
        [pageSize]="10" 
        [pageSizeOptions]="[5, 10, 25, 100]"> 
    </md-paginator> 

回答

0

打破我的頭2天之後,我意識到,這是不同意的問題。我必須用<md-header-cell *cdkHeaderCellDef>Summary Name</md-header-cell>代替<md-header-cell *cdkCellDef>Summary Name</md-header-cell>