Although there are numerous questions on stackoverflow with accepted answers, I haven't been able to find the specific one I'm looking for.
In my scenario, I have a parent HTML file importing another HTML from it. I am fetching a list in the parent.ts and passing it to the child component. However, when I try to use the list in the child HTML, I encounter the following error:
Any assistance on this matter would be highly appreciated.
Error:
ERROR TypeError: Cannot read property '0' of undefined
at Object.eval [as updateDirectives] (QuarterDataComponent.html:5)
dashboard.component.ts
dashboardDataList: Dashboard[];
ngOnInit() {
this.selectedLineId = sessionStorage.getItem("LINE_ID");
if(this.selectedLineId === undefined || this.selectedLineId === null) {
alert("Please select Line in 'Configuration' tab");
this.router.navigate(['/configuration']);
} else {
this.populateDashboardData();
}
}
populateDashboardData() {
this.dashboardService
.getDashboardData(1, 101, this.fromDatetime, this.toDatetime)
.subscribe(dashboardDataList => this.dashboardDataList = dashboardDataList);
}
dashboard.component.html
<div style="height:100%;">
<app-quarter-data [dashboardDataList]="dashboardDataList"></app-quarter-data>
</div>
quarter-data.component.ts @Component({ selector: 'app-quarter-data', templateUrl: './quarter-data.component.html', styleUrls: ['./quarter-data.component.css'] }) export class QuarterDataComponent {
@Input() dashboardDataList: Dashboard[];
ngOnInit() {
alert("1...");
}
} quarter-data.component.html (Error from the code dashboardDataList[0] )
<fieldset class="scheduler-border" [ngClass]="dashboardDataList[0].isCurrentQuarter==true ? 'current-quarter-true' : 'current-quarter-false'">
<div class="quarterTopDiv">
<table class="quarterTopTable table-sm table-striped" appearance="border">
<thead>
<tr>
<th>Associate #</th>
<th>Sequence #</th>
</tr>
</thead>
<tbody >
<tr *ngFor="let installedPartView of dashboardDataList[0].installedPartViewList let index=index; let odd=odd; let even=even">
<td>{{installedPartView.associateId}}</td>
<td [tooltip]="'[' + installedPartView.productId + ']\n [' + installedPartView.partName + ']'" placement="top" show-delay="500">{{installedPartView.afOnSequenceNo}}</td>
</tr>
</tbody>
</table>
</div>
</fielsdet>
dashboard.service.ts
getDashboardDataByLineAndProcess(assNo: number, processId: string, fromDatetime: string, toDatetime: string) { return this.http .get(this.serviceUrl+'defect-result-data-for-dashboard/'+ assNo+ '/' + processId+'/' + fromDatetime + '/' + toDatetime) .map(response => { const array = response.json() as Dashboard[]; return array; }) .catch((error: any) => { if (error._body) { const errorBody = JSON.parse(error._body); this.alertService.error(errorBody.message); } else { this.alertService.error(error); } return Observable.throw(error.statusText); }); }
REST Service output:
[{
"quarter": 1,
"isCurrentQuarter": true,
"noOfDefects": 3,
"target": 0,
"lineId": null,
"installedPartViewList": [{
"defectResultId": 2000009918,
"productId": "VAN GUARD",
"partName": "AIR SHUTTLE",
"partId": null,
"partSerialNumber": "A1",
"actualTimestamp": "2019-03-06T21:17:32.773+0000",
"quarter": 1,
"associateId": "userid ",
"productionDate": null,
}, {
"defectResultId": 2000009919,
"productId": "SUN PH",
"partName": "AIR SHUTTLE",
"partId": null,
"partSerialNumber": "A1",
"installedPartStatus": 1,
"measurementStatus": null,
"actualTimestamp": "2019-03-06T21:17:32.773+0000",
"quarter": 1,
"associateId": "userid ",
"productionDate": null,
}, {
"defectResultId": 2000009920,
"productId": "SUM HOS",
"partName": "AIR SHUTTLE",
"partId": null,
"partSerialNumber": "A1",
"installedPartStatus": 1,
"measurementStatus": null,
"actualTimestamp": "2019-03-06T21:17:32.773+0000",
"quarter": 1,
"associateId": "userid ",
"productionDate": null,
}],
"defectResultViewList": [{
"defectResultId": 2000009918,
"productId": "BOA",
}, {
"defectResultId": 2000009919,
"productId": "PHONE RT",
}, {
"defectResultId": 2000009920,
"productId": "SUN PH",
}],
"processAssociateViewList": null,
"associateSummaryViewList": null
}, {
"quarter": 2,
"isCurrentQuarter": null,
"noOfDefects": 0,
"target": 0,
"lineId": null,
"installedPartViewList": [],
"defectResultViewList": null,
"processAssociateViewList": null,
"associateSummaryViewList": null
}, {
"quarter": 3,
"isCurrentQuarter": null,
"noOfDefects": 0,
"target": 0,
"lineId": null,
"installedPartViewList": [],
"defectResultViewList": null,
"processAssociateViewList": null,
"associateSummaryViewList": null
}, {
"quarter": 4,
"isCurrentQuarter": null,
"noOfDefects": 0,
"target": 0,
"lineId": null,
"installedPartViewList": [],
"defectResultViewList": null,
"processAssociateViewList": null,
"associateSummaryViewList": null
}]