Ich arbeite an einer Angular2 App und dies funktionierte gut, bis RC1 herauskam (obwohl es nie in RC0 getestet wurde).Angular2 RC1 Service verliert initiierte Eigenschaften
Im Wesentlichen habe ich eine CacheService-Klasse, Subskribenten Subskriptionen in einer 'remoteService' Klasse. Alle Komponenten beziehen sich auf die cacheService.player, anstatt die Anforderung an den remoteService zu stellen. Ich tue dies, weil es auch den Anwendungs-Caching-Layer vom remoteService entkoppelt, so dass der cacheService zwischengespeichert werden kann und der remoteService auf den Remote-Service zugreifen kann.
Wenn die Komponente jedoch instanziiert wird, wird der cacheService-Konstruktor aufgerufen, der das Array players [] initialisiert.
Wenn der remoteService jedoch einen Player ausgibt, kann die Funktion innerhalb des Abonnements nicht auf das Array players [] zugreifen - es ist nicht initialisiert.
Auch dies funktionierte in der Beta, aber nicht in RC.
Fehle ich etwas?
Der Caching-Dienst (vereinfacht)
@Injectable()
export class cacheService {
public players: any[];
constructor(private _service: remoteService) {
this.players = [];
_service.players.subscribe((p: player) => {
if (this.players[p.id] && this.players[p.id].score)
p.score = this.players[p.id].score;
this.players[p.id] = p;
});
}
}
Die Komponente (wieder vereinfachter)
@Component({
selector: 'player-view',
templateUrl: '/Template/PlayerView'
})
export class PlayerView implements OnInit {
public playerCache = any[];
constructor(private _cacheService: cacheService) {
this.playerCache = [];
}
getDraftData() {
this._cacheService.getPlayers(league.id);
this.playerCache = this._cacheService.players;
}
}
ngOnInit() {
this.getDraftData();
}
}
Edit: korrigierte Transkriptions Fehler.
Schwer zu sagen von dem Code, den Sie gepostet haben. Wie sieht 'getPlayers() 'aus? Was ist die genaue Fehlermeldung, die Sie erhalten? –
Der Fehler tritt tatsächlich auf, wenn versucht wird, auf eine Eigenschaft des this.players [] - Arrays zuzugreifen (z. B. this.players [p.id] .score). Die Fehlermeldung lautet "Kann den Eigenschaftswert von undefined nicht lesen". –
Das Problem liegt offensichtlich bei Ihren Daten. Überprüfen Sie, ob die Daten tatsächlich in '_service.players.subscribe (...)' gesetzt sind, bevor Sie darauf zugreifen. "Beobachtbar" ist asynchron. Nur weil Sie es abonniert haben, heißt das nicht, dass Sie sofort einen Wert erhalten. Der Wert kann eventuell eingestellt werden, aber es ist definitiv nicht sofort. –