每当我尝试在http.get(url)调用中使用{{requestType:'text'}}时,都会收到一个错误,我无法进行区分,并且仅允许数组和可迭代对象;但是,我正在拿我的对象并将其转换为数组。我需要一些帮助来了解我的错误以及如何解决我的情况
当我删除RequestType时,数组不会出现任何问题,并显示在前端。
----service-----
getAll(){
const requestOptions: Object = {
/* other options here */
responseType: 'text'
}
return this.http.get<any>(this.url, requestOptions);
}
---component .ts-----
notificationsFass: any[];
constructor(route: ActivatedRoute, private metaService: Meta, private notificationService: NotificationsFassService) {
this.notificationsFass = [];
}
ngOnInit() {
this.notificationService.getAll()
.subscribe(notificationsFass => {
this.notificationsFass = notificationsFass;
}
);
}
---html---
<div *ngFor="let m of notificationsFass">
---error----
ERROR Error: Error trying to diff '[{"incidentNumber":700,"createdByName":"FASS Notification","createdDate":"2019-03-27T09:18:15.000+0000"}]'. Only arrays and iterables are allowed
答案 0 :(得分:1)
基于错误消息中的json,您需要执行以下操作:
INotification
。这将定义反序列化json响应上可用的成员。http.get<T>
中提供泛型类型参数。调用http.get
时,它将尝试反序列化从服务器到对象图的json响应。通过将INotification[]
定义为返回类型,其他调用者(例如来自组件)现在可以安全地调用返回类型(如find
或其他Array.prototype成员,以及访问实例中的已定义成员)。数组。 responseType: 'text'
仅在您未从服务器发出或从服务器发出 响应时才需要,而该响应是文本而不是json。前者可以通过post
或put
或delete
调用发生,其中服务器可能仅发送状态而响应中没有消息正文。
这是根据上述反馈重写的服务代码。
notificationsFassService.ts
export interface INotification {
incidentNumber: number;
createdByName: string;
createdDate: string;
}
export class NotificationsFassService {
constructor (private readonly http: HttpClient) { }
getAll():Observable<INotification[]> {
return this.http.get<INotification[]>(this.url);
}
}
notificationsFassComponent.ts
export class NotificationsFassComponent implements OnInit {
notificationsFass: INotification[];
constructor(route: ActivatedRoute, private metaService: Meta, private notificationService: NotificationsFassService) {
this.notificationsFass = [];
}
ngOnInit() {
this.notificationService.getAll()
.subscribe(notificationsFass => {
this.notificationsFass = notificationsFass;
});
}
}