【发布时间】:2019-07-08 20:27:32
【问题描述】:
我的应用需要发出一些 api 请求(大约 500 个)并显示数据。它需要在请求完成时显示结果。到目前为止,我已将其设置为使用带有 observable 的异步管道。
我尝试将 ChangeDetectorRef.detectChanges() 放入 complete() 函数调用中。但视图没有受到任何影响。
news.component.ts
export class NewsComponent implements OnInit {
news: Observable<News[]>;
temp: News[] = new Array();
constructor(private dataService: DataService, private ref: ChangeDetectorRef) {
}
ngOnInit() {
this.news = this.getData();
}
getData(): Observable<News[]> {
let newsArr = new Subject<News[]>();
this.dataService.getTopNews().subscribe(val => {
this.temp.push(val);
newsArr.next(this.temp);
}, null, () => {
newsArr.complete();
this.ref.detectChanges();
console.log(this.news); //print all fetched data
});
return newsArr.asObservable();
}
}
news.component.html
<app-news-item *ngFor="let newsItem of news | async" [news]="newsItem">
</app-news-item>
news-item.component.ts
@Component({
selector: 'app-news-item',
templateUrl: './news-item.component.html',
styleUrls: ['./news-item.component.css']
})
export class NewsItemComponent implements OnInit {
@Input() news: Subject<News>;
constructor() { }
ngOnInit() {
}
}
视图 (html) 只更新一次,一开始只有一些数据块。数据正在正确加载,并且在获取所有数据后也会触发 complete()。
【问题讨论】:
-
数据服务getTopNews函数有什么作用?
-
getTopNews 函数从远程获取所有数据并通过可观察对象一一返回。 ``` getTopNews(): Observable
{ // news = new Subject (); // forEach id 从远程获取数据 // news.next(Json data) // return news.asObservable(); } ````