Reputation: 2116
I have the following set of data coming from a JSON file which I am trying to display via "*ngFor" in my template. I can display most of it except the "people" Objects. There can be any amount of "people" Objects. This example data set only has 2 in it.
[{
"caseNumber": "01/01/2020",
"caseData": {
"caseType": "Criminal",
"caseCompName": "",
"caseCompNumber": "12121212",
"caseDate": "01/02/2019",
"caseTime": "12:00",
"caseStatus": "Open"
},
"people": [{
"name": "Paul",
"lastName": "Von Zeuner",
"middleName": "Waldemar",
"dob": "1981-09-29",
"countryBirth": "South Africa"
},{
"name": "John",
"lastName": "Doe",
"middleName": "Steve",
"dob": "1981-09-29",
"countryBirth": "South Africa"
}]
}]
I attempted something like this but it only displays the first person. Im not sure if the Array itself is incorrectly structured or if the *ngFor is the problem
<div *ngFor='let item of caseData; let i=index'>
<div class="row">
<div class="col-sm">
Name: {{item.people[i].name}}
</div>
<div class="col-sm">
Last Name: {{item.people[i].lastName}}
</div>
</div>
<div class="row">
<div class="col-sm">
Middel Name: {{item.people[i].middleName}}
</div>
<div class="col-sm">
Country of Birth: {{item.people[i].countryBirth}}
</div>
</div>
</div>
Please assist me
Upvotes: 2
Views: 926
Reputation: 381
The JSON array contains only 1 object with 3 attributes: caseNumber, caseData and people which is an array of objects.
You're using ngFor to loop through caseData when what you need to do is loop throught the whole data array and then loop through the people array like below:
ComponentName.ts:
dataArray =
[{
"caseNumber": "01/01/2020",
"caseData": {
"caseType": "Criminal",
"caseCompName": "",
"caseCompNumber": "12121212",
"caseDate": "01/02/2019",
"caseTime": "12:00",
"caseStatus": "Open"
},
"people": [{
"name": "Paul",
"lastName": "Von Zeuner",
"middleName": "Waldemar",
"dob": "1981-09-29",
"countryBirth": "South Africa"
},{
"name": "John",
"lastName": "Doe",
"middleName": "Steve",
"dob": "1981-09-29",
"countryBirth": "South Africa"
}]
}]
ComponentName.html
<div *ngFor='let item of dataArray; let i=index'>
<div *ngFor='let person of item.people'>
<div class="row">
<div class="col-sm">
Name: {{person.name}}
</div>
<div class="col-sm">
Last Name: {{person.lastName}}
</div>
</div>
<div class="row">
<div class="col-sm">
Middel Name: {{person.middleName}}
</div>
<div class="col-sm">
Country of Birth: {{person.countryBirth}}
</div>
</div>
</div>
</div>
Upvotes: 1
Reputation: 6983
I've created a working sample on stackblitz take a look.
In the component.ts
data =[{
"caseNumber": "01/01/2020",
"caseData": {
"caseType": "Criminal",
"caseCompName": "",
"caseCompNumber": "12121212",
"caseDate": "01/02/2019",
"caseTime": "12:00",
"caseStatus": "Open"
},
"people": [{
"name": "Paul",
"lastName": "Von Zeuner",
"middleName": "Waldemar",
"dob": "1981-09-29",
"countryBirth": "South Africa"
},{
"name": "John",
"lastName": "Doe",
"middleName": "Steve",
"dob": "1981-09-29",
"countryBirth": "South Africa"
}]
}];
In the component.html
<div *ngFor='let item of data; let i=index'>
<div *ngFor="let person of item.people">
<div class="row">
<div class="col-sm">
Name: {{person.name}}
</div>
<div class="col-sm">
Last Name: {{person.lastName}}
</div>
</div>
<div class="row">
<div class="col-sm">
Middel Name: {{person.middleName}}
</div>
<div class="col-sm">
Country of Birth: {{person.countryBirth}}
</div>
<br>
</div>
</div>
</div>
Upvotes: 2
Reputation: 27224
<div *ngFor='let item of caseData'>
<div *ngFor='let person of item.people'>
<div class="row">
<div class="col-sm">
Name: {{person.name}}
</div>
<div class="col-sm">
Last Name: {{person.lastName}}
</div>
</div>
<div class="row">
<div class="col-sm">
Middel Name: {{person.middleName}}
</div>
<div class="col-sm">
Country of Birth: {{person.countryBirth}}
</div>
</div>
</div>
</div>
Upvotes: 0
Reputation: 1826
You should use 2 ngFor in you'r html.
try this code :
<div *ngFor='let item of caseData; let i=index'>
<div *ngFor="let person of item.people" class="row">
<div class="col-sm">
Name: {{person.name}}
</div>
<div class="col-sm">
Last Name: {{person.lastName}}
</div>
<div class="col-sm">
Middel Name: {{person.middleName}}
</div>
<div class="col-sm">
Country of Birth: {{person.countryBirth}}
</div>
</div>
</div>
Upvotes: 1
Reputation: 82
try this
<div *ngFor='let item of people; let i=index'>
<div class="row">
<div class="col-sm">
Name: {{item.name}}
</div>
<div class="col-sm">
Last Name: {{item.lastName}}
</div>
</div>
<div class="row">
<div class="col-sm">
Middel Name: {{item.middleName}}
</div>
<div class="col-sm">
Country of Birth: {{item.countryBirth}}
</div>
</div>
</div>
Upvotes: 1