Ich habe diesen Fehler:Angular 2 Wie kann ich meine Variable async auf Werte warten lassen?
TypeError: Cannot read property 'length' of undefined at PaginationComponent.ngOnChanges (pagination.component.ts:38)
Das ist mein PaginationComponent
:
@Input() items = [];
@Input('page-size') pageSize;
@Output('page-changed') pageChanged = new EventEmitter();
pages: any[];
currentPage;
public numberofpages = 10;
ngOnChanges(){
this.currentPage = 1;
var pagesCount = this.items.length/this.pageSize;
this.pages = [];
for (var i = 1; i <= pagesCount; i++)
this.pages.push(i);
}
Dieses, wie ich es in einer anderen Komponente bin mit AboutUsComponent
: sind
<pagination [items]="posts" [page-size]="pageSize" (page-changed)="onPageChanged($event)"></pagination>
die Pfosten geladen in AboutUsComponent:
private loadPosts(){
this.postsLoading = true;
this._aboutusService.getPosts().subscribe(
posts => {this.posts = posts;
this.pagedPosts = this.getPostsInPage(1)},
null,
() => { this.postsLoading = false});
}
Wie ich es verstehe passiert wegen .subscribe()
asynchronen Laden von Beiträgen und @Input() items = [];
könnte geladen werden, bevor Beiträge kommen. Wie kann ich es erwarten oder was über Lösung vorschlagen? Danke.
Sie laden 'this.posts' aber Sie Verwende 'this.items.length'. Vielleicht müssen Sie es in 'this.posts.length' ändern. – Dinistro
Warum verwenden Sie OnChanges? Versuchen Sie OnInit. Wann löst Ihre Komponente loadPosts aus? – kfa
'ngOnChange' feuert zu Beginn des Lebenszyklus der Komponente. Verwenden Sie "try/catch" oder "if", um diesen Fehler zu umgehen. Auch denke ich, besser Ansatz ist, bestimmte Ereignisse zu verwenden, wenn Sie Ihre Artikel neu anordnen möchten. – Kliment