2016-05-07 45 views
0

我正在開發一個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(); 
    } 
} 

編輯:校正轉錄錯誤。

+0

很難從您發佈的代碼中分辨出來。 getPlayers()如何看起來像?什麼是你得到確切的錯誤信息? –

+0

嘗試訪問this.players []數組的屬性(例如this.players [p.id] .score)時實際發生此錯誤。錯誤消息是「無法讀取未定義的屬性分數」。 –

+0

問題顯然與您的數據。在訪問數據之前,檢查數據是否真正在'_service.players.subscribe(...)'中設置。 'Observable'是異步的。僅僅因爲您訂閱了它並不意味着您立即獲得價值。該值可能會最終設定,但它絕對不會立即。 –

回答

0

這行是無效的

this.playerCache = this._dataService.players; 

服務引用是this._cacheService。沒有this._dataServicedataService(仍然不同 - 沒有_)是this._cacheService的類型

+0

你是對的,這實際上是我簡化代碼時的轉錄錯誤。我相應地更新了片段。 –

0

我發現了這個問題。我有一條線正在訪問播放器數組的屬性而不被檢查。

例如:

if (this.players[p.id]) 
    temp = this.players[p.id].score 

this.players[p.id].score = temp 

當玩家[p.id]的非實例的問題出現。