簡體   English   中英

從服務器獲取數據后,角度材料表排序不起作用

[英]Angular Material Table sorting not working after getting data from server

Angular材質表排序有問題,我在onInit函數中從server獲取數據,然后當應用獲取到數據時,我將其放入dataSource中,然后設置分頁和排序。 它不起作用,我可以單擊表格上的箭頭,但它不會對元素進行排序。

我試圖在響應之后立即設置它、回調或 onAfterViewInit 函數。

  public displayedColumns: string[] = ['CreatedDate', 'CreatedBy', 'Name', 'Version', 'URL', 'Language', 'deleted','download'];
  public dataSource = new MatTableDataSource();
  public noDataMessage;
  @ViewChild(MatSort) sort: MatSort;
  @ViewChild(MatPaginator) paginator: MatPaginator;

  constructor(
    private _http: HttpClient, 
    private _snackBar: MatSnackBar, 
    private _router: Router,
    private _errorHandlingService: ErrorHandlingService,
    public _permissionCkecher: PermissionCheckerService) {
  }

  ngOnInit() {
    this.getDocumentList();
  }

  /**
   * Applys filter
   * @param filterValue 
   */
  public applyFilter(filterValue: string): void {
    this.dataSource.filter = filterValue.trim().toLowerCase();
  }

  /**
   * Gets document list
   */
  private getDocumentList(): void {
    this._http.get('/api/Document/WithParam?ignoreGlobalFilter=true').subscribe(data => {
      if(data && (<any>data).length !== 0) {
        let listedDocumentData = (<any>data);
        this.addCategoryToDoc(listedDocumentData);
        this.dataSource.sort = this.sort;
      } else {
        this.noDataMessage = true;
      }
    },error => {
      this._errorHandlingService.handlingError(error);
    }
  )
  }

  /**
   * Gets Doc Categories
   */
  private addCategoryToDoc(DocList): any {
    this._http.post('/api/DocumentCategory/ListAll?ignoreCultureInfo=true',{}).subscribe(data => {
      let docCats;
        if(data) {
          docCats = (<any>data).filteredData;
        }
        DocList.forEach(LinkElement => {
          LinkElement.Category = docCats.filter(CatElement => CatElement.id === LinkElement.categoryId)[0]
        });
   //Here i call the callback
        this.addDataToDataSource(DocList);
      }, error => this._errorHandlingService.handlingError(error)
    )
  }

 //Here is the callback
  private addDataToDataSource(listedDocData) {
    this.dataSource = new MatTableDataSource(listedDocData);
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
 }

這是 HTML:

<div class="main-container">
    <section class="listing document">
    <mat-form-field class="search-field">
        <input matInput (keyup)="applyFilter($event.target.value)" placeholder="Search" autocomplete="off">
    </mat-form-field>
    <table mat-table [dataSource]="dataSource" matSort class="mat-elevation-z8">

        <ng-container matColumnDef="CreatedDate" >
            <th mat-header-cell *matHeaderCellDef mat-sort-header>Created</th>
            <td mat-cell *matCellDef="let element"> {{element.dateCreated}} </td>
        </ng-container>

        <ng-container matColumnDef="CreatedBy">
            <th mat-header-cell *matHeaderCellDef mat-sort-header>Created By</th>
            <td mat-cell *matCellDef="let element"> {{element.createdBy}} </td>
        </ng-container>

        <ng-container matColumnDef="Name" >
            <th mat-header-cell *matHeaderCellDef mat-sort-header>Name</th>
            <td mat-cell *matCellDef="let element"> {{element.name}} </td>
        </ng-container>

        <ng-container matColumnDef="Version">
            <th mat-header-cell *matHeaderCellDef mat-sort-header>Version</th>
            <td mat-cell *matCellDef="let element"> {{element.version}} </td>
        </ng-container>

        <ng-container matColumnDef="URL">
            <th mat-header-cell *matHeaderCellDef mat-sort-header>Document Category</th>
            <td mat-cell *matCellDef="let element"> {{((element.Category)?element.Category.name:'')}} </td>
        </ng-container>

        <ng-container matColumnDef="deleted">
            <th mat-header-cell *matHeaderCellDef mat-sort-header>Deleted element</th>
            <td mat-cell *matCellDef="let element"> {{((element.isDeleted)?'igen':'nem')}} </td>
        </ng-container>

        <ng-container matColumnDef="Language">
            <th mat-header-cell *matHeaderCellDef mat-sort-header>Language</th>
            <td mat-cell *matCellDef="let element"> {{element.language}} </td>
        </ng-container>

        <ng-container matColumnDef="download">
            <th mat-header-cell *matHeaderCellDef>Download</th>
            <td mat-cell *matCellDef="let element" (click)="$event.stopPropagation()">
                <a href="{{element.url}}" download>Download</a>
            </td>
        </ng-container>

        <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
        <tr class="document-row" mat-row *matRowDef="let row; columns: displayedColumns;" (click)="navigateForDocumentComp(row)"></tr>
        </table>
        <div *ngIf="noDataMessage" class="empty-message">Üres adathalmaz</div>
        <mat-paginator 
        #paginator
        [pageSizeOptions]="[5, 10, 25, 50]"                 
        showFirstLastButtons></mat-paginator>
    </section>
</div>

解決方案,matColumnDef 屬性必須與對象鍵相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM