У меня есть серверная база данных, которая обслуживает записи учащихся в виде файлов JSON. Затем эти объекты заносятся в таблицу PrimeNG для отображения и выбора.
student.component.html
<p-table class="table" [columns]="cols" [value]="searchResults">
<ng-template pTemplate="header" let-columns>
<tr>
<th *ngFor="let col of columns">
{{col.header}}
</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-rowData>
<tr [pSelectableRow]="rowData" class="tr-click" (click)="getSelected(rowData)">
<td *ngFor="let col of columns">
{{rowData[col.field]}}
</td>
</tr>
</ng-template>
</p-table>
Однако, когда я пытаюсь прочитать или перебрать записи учащихся в TypeScript, я получаю «TypeError: Cannot read property XXX of undefined».
student.component.ts
export class StudentComponent implements OnInit {
searchResults: Student[];
cols: any[];
constructor(private router: Router, private studentService: StudentService, private http: HttpClient) {
}
ngOnInit(): void {
this.studentService.getStudents().subscribe(data => {
this.searchResults = data;
});
// table columns
this.cols = [
{ field: 'studentId', header: 'Student ID'},
{ field: 'name', header: 'Name'},
{ field: 'dob', header: 'Date of Birth'},
{ field: 'status', header: 'Status'}
];
// tested the object with these
alert('1: ' + JSON.stringify(this.searchResults)); // undefined
alert('2: ' + this.searchResults); // undefined
alert('3: ' + this.searchResults.toString); // undefined
}
// This is what I am trying to accomplish
getSelected(selected: Student) {
for (const result of this.searchResults) {
if (selected.studentID === result.studentID) {
// do some other stuff
}
}
}
Итак, почему таблица PrimeNG может заполнить таблицу объектом, но я не могу выполнить итерацию по ней в TypeScript? Как мне заставить его рассматривать объект как массив?