【发布时间】:2018-11-02 12:29:26
【问题描述】:
我正在尝试使用带有分页器的可扩展行的角度材料表,问题是,用于可扩展行的自定义连接 MatTableDataSource 分页停止工作,我在任何地方都找不到问题的答案。
所以,测试表数据是由这个存根服务给出的:
import { Injectable } from '@angular/core';
import { TableRow } from './table-row';
import { Observable, of } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class TestTableService {
private testData : TableRow[] = [
{id:1, name:'pi', value:3.14},
{id:2, name:'euler', value:2.71},
{id:3, name:'Feigenbaum constant', value:2.50290},
{id:4, name:'Mills constant', value:1.30637},
{id:5, name:'one', value:1},
{id:6, name:'square root of 2', value:1.41421}
];
constructor() { }
public getData() : Observable<TableRow[]>
{
return of(this.testData);
}
}
表格组件是:
import { Component, OnInit, ViewChild } from '@angular/core';
import { TestTableService } from './../test-table.service';
import { TableRow } from './../table-row';
import {MatPaginator, MatTableDataSource} from '@angular/material';
import { Observable, of} from 'rxjs';
import { animate, state, style, transition, trigger } from '@angular/animations';
@Component({
selector: 'app-test-table',
templateUrl: './test-table.component.html',
styleUrls: ['./test-table.component.css'],
animations: [
trigger('detailExpand', [
state('collapsed', style({ height: '0px', minHeight: '0', visibility: 'hidden' })),
state('expanded', style({ height: '*', visibility: 'visible' }))
]),
],
})
export class TestTableComponent implements OnInit {
tableData : myDataSource<TableRow> = new myDataSource();
columnsToDisplay = ['id', 'name','value'];
isExpansionDetailRow = (i: number, row: Object) => row.hasOwnProperty('detailRow');
expandedElement = null;
constructor(private testTable : TestTableService) { }
@ViewChild(MatPaginator) set matPaginator(mp: MatPaginator) {
this.paginator = mp;
this.tableData.paginator = this.paginator;
}
//@ViewChild(MatPaginator) paginator: MatPaginator;
ngOnInit() {
this.testTable.getData()
.subscribe(table => this.tableData.data = table);
//this.tableData.paginator = this.paginator;
}
expand(row){
this.expandedElement = this.expandedElement == row ? null : row;
}
//setTimeout(() => this.tableData.paginator = this.paginator);
}
组件的html:
<table mat-table [dataSource]="tableData">
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> Id </th>
<td mat-cell *matCellDef="let row"> {{row.id}} </td>
</ng-container>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> Name </th>
<td mat-cell *matCellDef="let row"> {{row.name}} </td>
</ng-container>
<ng-container matColumnDef="value">
<th mat-header-cell *matHeaderCellDef> Value </th>
<td mat-cell *matCellDef="let row"> {{row.value}} </td>
</ng-container>
<ng-container matColumnDef="details">
<td mat-cell *matCellDef="let detail">
<!--
<app-test-table-detail [show]="detail.element == expandedElement" ></app-test-table-detail>
-->
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="columnsToDisplay"></tr>
<tr mat-row *matRowDef="let row; columns: columnsToDisplay"
matRipple
(click)="expand(row)"></tr>
<tr mat-row *matRowDef="let row; columns: ['details']; when:isExpansionDetailRow"
[@detailExpand]="row.element==expandedElement ? 'expanded' : 'collapsed'"
style="overflow: hidden"></tr>
</table>
<mat-paginator [pageSizeOptions]="[3, 10, 20]" showFirstLastButtons></mat-paginator>
有趣的是,分页器给出了正确的数字但没有效果,我应该在流中处理它吗?在连接函数中?
[编辑] stackblitz 的最新代码
我也试过删评论的人推荐的,就是用AfterViewInit,也没用
[编辑] 通过调试一个没有这个问题的案例(没有可扩展的行),区别在于这段代码的 sn-p,使用我自己的 DataSource 版本的可扩展行没有观察者,但是使用本机有,我是我的数据源定义中缺少某些内容?
【问题讨论】:
标签: angular html-table pagination angular-material angular6