I am getting the following error
"ERROR Error: Error trying to diff '[object Object]'. Only arrays and iterables are allowed" during runtime.
I am consuming a JSON response and attempting to display it in the UI in tables format. please find the attached code and let me know what is the mistake in the code which I have made
JSON webservice
{
"data": [{
"action": "ok",
"btl_count": 2,
"created_user_nm": "jyjohn2",
"modified_dt": "Wed, 04 Apr 2018 14:32:10 GMT",
"order_sales_rep_cuid": "jyjohn2",
"qoa_prd_envlp_instance_id": 7363849,
"qoa_sales_order_id": 238196381,
"status_cd": "SUB_TO_OEC",
"submit_status_cd": "BK_GLOBAL_F"
}]
}

post.model.ts
export interface Posts {
//userid:number;
//id:number;
//title:string;
//body:string;
action: string;
btl_count: number;
created_user_name: string;
modified_dt: Date;
order_sales_rep_cuid: string;
qoa_prd_envlp_instance_id: number;
qoa_sales_order_id: number;
status_cd: string;
submit_status_cd: string;
}
post.service.ts
import {
Injectable
} from '@angular/core';
import {
Posts
} from './post.model';
import {
Http
} from '@angular/http';
import 'rxjs/Rx';
@Injectable()
export class PostsService {
serviceURL: string = "URL(not mentioning the URL for security reason)"
constructor(private http: Http) {}
getPosts() {
return this.http.get(this.serviceURL).map((resp) => {
return resp.json()
})
}
}
app.component.ts
import {
Component
} from '@angular/core';
import {
PostsService
} from './posts.service';
import {
Posts
} from './post.model';
@Component({
selector: 'app-root',
template: ` <
h1 > {
{
title
}
} < /h1> <
table border = "1"
class = "colwidth" >
<
tr >
<
th > action < /th> <
th > btl_count < /th> <
th > created_user_nm < /th> <
th > modified_dt < /th> <
th > order_sales_rep_cuid < /th> <
th > qoa_prd_envlp_instance_id < /th> <
th > qoa_sales_order_id < /th> <
th > status_cd < /th> <
th > submit_status_cd < /th> <
/tr> <
tr * ngFor = "let data of DataArray" >
<
td > {
{
data.action
}
} < /td> <
td > {
{
data.btl_count
}
} < /td> <
td > {
{
data.created_user_nm
}
} < /td> <
td > {
{
data.modified_dt
}
} < /td> <
td > {
{
data.order_sales_rep_cuid
}
} < /td> <
td > {
{
data.qoa_prd_envlp_instance_id
}
} < /td> <
td > {
{
data.status_cd
}
} < /td> <
td > {
{
data.submit_status_cd
}
} < /td> <
/tr> <
/table>`,
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
//objectKeys = Object.keys;
//objPosts:Posts;
DataArray: any = [];
constructor(private postsService: PostsService) {
}
getPeople(): void {
this.postsService.getPosts().subscribe(
data => {
this.DataArray = data;
console.log(data)
},
(error) => console.log(error),
() => console.log("Complete")
)
}
ngOnInit() {
this.getPeople();
}
}
It looks like your response information is returned in the format of:
resp = {"data": [<list of properties>]}
returning resp.json() to the component to iterate, but the response itself is not an array. Try returning resp.json().data, which should send the array portion of the response.
You could have also just added '.data' on this line, 'in tr * ngFor = "let data of DataArray.data" >`
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With