【发布时间】:2017-10-06 21:36:36
【问题描述】:
我有一项服务正在本地获取书籍列表我收到此错误:
BooksComponent.html:2 ERROR Error: Cannot find a differ supporting object
'[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
at NgForOf.webpackJsonp.../../../common/@angular/common.es5.js.NgForOf.ngOnChanges (common.es5.js:1681)
at checkAndUpdateDirectiveInline (
这是我的服务类:
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/Rx';
import { Books } from './books';
@Injectable()
export class FetchbooksService {
books:any[];
constructor(private _http:Http) { }
fetch():Observable<Books[]>{
return this._http.get('./assets/books.json').map(
(response:Response)=> <Books[]>response.json(),
error => console.log(error)
).do(data => console.log(data));
}
}
这是组件:
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { FetchbooksService } from '../fetchbooks.service';
import { Books } from '../books';
@Component({
selector: 'app-books',
templateUrl: './books.component.html',
styleUrls: ['./books.component.css']
})
export class BooksComponent implements OnInit {
bookss:Books[];
constructor(private _bookservice: FetchbooksService) {
_bookservice.fetch().subscribe(
(bookss)=> this.bookss = bookss,
error => console.log(error)=
);
}
ngOnInit() {
}
}
书籍是一个界面 请告诉我我做错了什么?
这是books.component.html:
<ul>
<li *ngFor = "let book of bookss ">
Book: {{book.title}}
</li>
</ul>
这是服务返回的数据:
console.log(bookss) result
【问题讨论】:
-
此错误不在
TS端,它是HTML 迭代错误。请您发布BooksComponent.html文件。错误在该文件的*ngFor中。 -
如果我们还可以看到从服务中检索到的您的数据的
console.log,那就太好了。有没有可能,即使您期待一系列书籍 (Books[]),您也会收到一些其他数据结构? -
感谢回复我在问题中添加了html和console.log,请查看并告诉我有什么问题非常感谢
-
我认为正如您从控制台看到的那样,书籍是一个对象而不是数组,我认为它应该是一个数组,因此 ngfor 可以遍历它
-
如何将其转换为数组??我应该在服务或组件中的哪个位置执行此操作?
标签: angular http typescript angular4-httpclient