【发布时间】:2016-09-13 22:16:20
【问题描述】:
我收到以下错误:
EXCEPTION: Cannot find a differ supporting object '[object Object]' in [files | async in Images@1:9]
这是模板的相关部分:
<img *ngFor="#file of files | async" [src]="file.path">
这是我的代码:
export class Images {
public files: any;
public currentPage: number = 0;
private _rawFiles: any;
constructor(public imagesData: ImagesData) {
this.imagesData = imagesData;
this._rawFiles = this.imagesData.getData()
.flatMap(data => Rx.Observable.fromArray(data.files));
this.nextPage();
}
nextPage() {
let imagesPerPage = 10;
this.currentPage += 1;
this.files = this._rawFiles
.skip((this.currentPage - 1) * imagesPerPage)
.take(imagesPerPage);
console.log("this.files:", this.files);
}
}
末尾的console.log 表明它是一个可观察对象:
this.imagesData.getData() 从 Angular 的 Http 服务返回一个可观察到的常规 RxJS,那么为什么异步管道不能使用它呢?也许我使用flatMap() 的方式是错误的,它搞砸了?
如果我尝试像这样订阅这个 observable:
this.files = this._rawFiles
.skip((this.currentPage - 1) * imagesPerPage)
.take(imagesPerPage)
.subscribe(file => {
console.log("file:", file);
});
它按预期打印对象列表:
【问题讨论】:
-
*ngFor只迭代一个数组,而不是一系列事件,因此您的Observable需要返回一个数组而不是一系列对象。 -
我会选择使用
scan运算符的Observable<File[]>。
标签: javascript angular reactive-programming rxjs observable