我正在开发一个Angular2应用程序,这个工作正常,直到RC1出来(虽然它从未在RC0中测试过)。
基本上我有一个cacheService类,它在“remoteService”类上订阅Subjects。任何组件都引用cacheService.players而不是向remoteService发出请求。我这样做是因为它还将应用程序缓存层与remoteService分离,允许cacheService缓存,而remoteService访问远程服务。
但是,在实例化组件时,会调用cacheService构造函数,初始化players []数组。
然而,当remoteService发出一个播放器时,subscribe中的函数无法访问players []数组 - 它是未初始化的。
同样,这在Beta中有效,但在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 :(得分:0)
此行无效
this.playerCache = this._dataService.players;
服务引用为this._cacheService
。没有this._dataService
。 dataService
(仍然不同 - 没有_
)是this._cacheService
答案 1 :(得分:0)
我发现了这个问题。我有一条线正在访问播放器阵列的属性而没有被检查。
例如:
if (this.players[p.id])
temp = this.players[p.id].score
this.players[p.id].score = temp
当玩家[p.id]未被实例化时,问题就出现了。