使用Angular Material Design表,我只是尝试对数据表中两列的标题进行排序。 (它们是下面代码中的Employee Name和Job Title列。)两者都没有排序。不知道为什么。这是我的代码和谢谢,CM
雇员-table.component.html
<div>
<mat-table [dataSource] = "dataSource" matSort>
<ng-container matColumnDef="photo">
<mat-header-cell *matHeaderCellDef>Profile</mat-header-cell>
<mat-cell *matCellDef="let employee"><img width = "100" height = "100" src = "../assets/images/{{employee.username}}.jpg" >
</mat-cell>
</ng-container>
<ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef mat-sort-header>Employee Name</mat-header-cell>
<mat-cell *matCellDef="let employee">{{employee.name}}</mat-cell>
</ng-container>
<ng-container matColumnDef="position">
<mat-header-cell *matHeaderCellDef mat-sort-header>Job Title</mat-header-cell>
<mat-cell *matCellDef="let employee">{{employee.position}}</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns" color="primary"></mat-header-row>
<mat-row *matRowDef="let row; columns:displayedColumns"></mat-row>
</mat-table>
</div>
雇员-table.component.ts
import { Component, OnInit, ViewChild } from '@angular/core';
import {Observable} from 'rxjs/Observable';
import {MatSort, MatSortable, MatTableDataSource} from '@angular/material';
import {EmployeeService} from '../employee.service';
@Component({
selector: 'app-employee-table',
templateUrl: './employee-table.component.html',
styleUrls: ['./employee-table.component.css']
})
export class EmployeeTableComponent implements OnInit {
@ViewChild(MatSort) sort: MatSort;
dataSource;
displayedColumns = ['photo', 'name', 'position'];
constructor() { }
ngOnInit() {
this.dataSource =[
{
"id": 1,
"name": "Leanne Grahamz",
"username": "Bret",
"position": "Software Developer"
},
{
"id": 2,
"name": "Ervin Howell",
"username": "Antonette",
"position": "Graphic Designer"
},
{
"id": 3,
"name": "Clementine Bauch",
"username": "Samantha",
"position": "Front End Developer"
},
{
"id": 4,
"name": "Patricia Lebsack",
"username": "Karianne",
"position": "Full Stack Developer"
},
{
"id": 5,
"name": "Chelsey Dietrich",
"username": "Kamren",
"position": "Database Administrator"
}
]; //End data object
this.dataSource.sort = this.sort;
}//End ng onInit
}//End class EmployeeTableComponent
答案 0 :(得分:0)
您在生命周期中过早地设置数据源排序this.dataSource.sort = this.sort;
。正如the material.angular.io examples所建议的那样,您应该在视图init之后设置数据源排序:
/**
* Set the sort after the view init since this component will
* be able to query its view for the initialized sort.
*/
ngAfterViewInit() {
this.dataSource.sort = this.sort;
}
您还应该编辑数据源初始化:
ngOnInit() {
this.dataSource = new MatTableDataSource([{
"id": 1,
"name": "Leanne Grahamz",
"username": "Bret",
"position": "Software Developer"
},
...
{
"id": 5,
"name": "Chelsey Dietrich",
"username": "Kamren",
"position": "Database Administrator"
}
]);
}
答案 1 :(得分:0)
或者,您也可以使用超时进行排序(如果需要,可以使用分页),例如:
setTimeout(() => {
this.tableDataSource.sort = this.sort;
this.tableDataSource.paginator = this.paginator;
});