我正在開發一個Angular2應用程序,這個工作正常,直到RC1出來(儘管它從未在RC0中測試過)。Angular2 RC1服務正在失去初始屬性
本質上我有一個cacheService類,它訂閱了'remoteService'類上的主題。任何組件引用cacheService.players而不是向remoteService發出請求。我這樣做是因爲它也將應用程序緩存層與remoteService分離,允許cacheService緩存,並通過remoteService訪問遠程服務。
但是,當實例化組件時,會調用cacheService構造函數,初始化players []數組。
但是,當remoteService發射播放器時,訂閱內的函數無法訪問播放器[]數組 - 它未初始化。
再次,這是工作在測試版,但沒有在RC。
我錯過了什麼嗎?
緩存服務(簡化的)
@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;
});
}
}
組分(再次簡化)
@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();
}
}
編輯:校正轉錄錯誤。
很難從您發佈的代碼中分辨出來。 getPlayers()如何看起來像?什麼是你得到確切的錯誤信息? –
嘗試訪問this.players []數組的屬性(例如this.players [p.id] .score)時實際發生此錯誤。錯誤消息是「無法讀取未定義的屬性分數」。 –
問題顯然與您的數據。在訪問數據之前,檢查數據是否真正在'_service.players.subscribe(...)'中設置。 'Observable'是異步的。僅僅因爲您訂閱了它並不意味着您立即獲得價值。該值可能會最終設定,但它絕對不會立即。 –