Ich habe einen Angular2-Dienst wie folgt. Ich versuche, dies als einen gemeinsamen Dienst zwischen mehreren Komponenten zu verwenden. Wenn es darauf ankommt, sind die Komponenten direkt an die public books
gebunden, und selectedBook properties
Ich möchte die Liste der Bücher und das derzeit ausgewählte Buch auf dem Dienst zwischenspeichern und nur beim ersten Aufruf diese auffüllen.Angular2 versucht, Element in einem Array zu erhalten, bevor Array belegt ist
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
@Injectable()
export class BookService {
public books: Book[];
public selectedBook: Book;
constructor(private http: Http,
private router: Router) {
this.http.get('/api/book/list')
.subscribe(result => this.books = result.json() as Book[]);
}
public getBooks() {
return this.books;
}
public setSelectedBook(id) {
this.selectedBook = this.books.filter(x => x.id == id)[0];
}
}
Das Problem ist, dass manchmal ich versuche, das Array zu lesen oder setSelecteBook(id)
aufrufen, bevor das Array tatsächlich bevölkert wird, was einen Absturz verursacht. Ich habe versucht, ein Beispiel für die Verwendung von Observablen zu finden, aber ich kann kein Szenario finden, das nah genug an meinem ist, um herauszufinden, wie ich es anpassen kann, um mein Problem zu lösen.
Sie müssen 'Bücher' im Konstruktor initialisieren:' this.books = [] ' –
Dies verzögert nur den Absturz nach diesem Punkt. Ich brauche etwas, damit es darauf wartet, dass das books-Array den Popup-Vorgang beendet, und anschließend das ausgewählte Buch einstellt. –