Reputation: 15
I am trying to display some data from an api in a mat table. However, even though I can see the data in the console, it will not show up in the mat table. The console shows no errors concerning the mat table and the titles of the columns appear properly.
I have already tried to use the async keyword to get the rest api data before the rest of the component is loaded.
This is my component
@Component({
selector: 'admin-dashboard',
templateUrl: './admin.component.html',
providers: [HTTPService],
styleUrls: ['./admin.component.css']
})
export class AdminComponent implements OnInit{
showForm= false;
buttonName= "Add User";
users:User= [];
tableColumns: string[] = ['name', 'email', 'company', 'phoneNumber', 'enabled', 'status'];
constructor(private fb: FormBuilder, private http: HTTPService){};
ngOnInit(){
this.getUsers();
}
async getUsers()
{
var arr= await this.http.listUsers().toPromise();
var i=0;
while(arr[i])
{
this.users.push(arr[i]);
i++;
}
console.log(this.users);
This is the html template
<table mat-table [dataSource]="users">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>Name</th>
<td mat-cell *matCellDef="let user">{{user.name}}</td>
</ng-container>
<ng-container matColumnDef="email">
<th mat-header-cell *matHeaderCellDef>Email</th>
<td mat-cell *matCellDef="let user">{{user.email}}</td>
</ng-container>
<ng-container matColumnDef="company">
<th mat-header-cell *matHeaderCellDef>Company</th>
<td mat-cell *matCellDef="let user">{{user.company}}</td>
</ng-container>
<ng-container matColumnDef="phoneNumber">
<th mat-header-cell *matHeaderCellDef>Phone Number</th>
<td mat-cell *matCellDef="let user">{{user.phoneNumber}}</td>
</ng-container>
<ng-container matColumnDef="enabled">
<th mat-header-cell *matHeaderCellDef>Enabled</th>
<td mat-cell *matCellDef="let user">{{user.enabled}}</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef>Status</th>
<td mat-cell *matCellDef="let user">{{user.status | lowercase}}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="tableColumns"></tr>
<tr mat-row *matRowDef="let row; columns: tableColumns"></tr>
</table>
Please let me know if more information is required, I am new to StackOverflow
Upvotes: 1
Views: 1929
Reputation: 5255
Try setting dataSource
of mat-table
using new MatTableDataSource
as follows.
TS
export class AdminComponent implements OnInit {
dataSource;
constructor(...){};
ngOnInit() {
this.getUsers();
}
async getUsers() {
const arr = await this.http.listUsers().toPromise();
let i = 0;
while(arr[i]) {
this.users.push(arr[i]);
i++;
}
this.dataSource = new MatTableDataSource<any>(this.users);
}
}
HTML
<table mat-table [dataSource]="dataSource">
...
</table>
Upvotes: 1