Я работаю над приложением Angular2, и это работало нормально, пока не вышел RC1 (хотя он никогда не тестировался в RC0).Angular2 RC1 Service потерял начальные свойства
По существу у меня есть класс cacheService, который подписывается на темы в классе «remoteService». Любые компоненты относятся к cacheService.players вместо запроса на удаленный сервис. Я делаю это, потому что он также отключает слой кэширования приложений от удаленного сервиса, позволяя кеш-кешированию кэшировать, а 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 (...)' перед тем, как вы его получите. «Наблюдаемый» - асинхронный. Просто потому, что вы подписались на него, это не значит, что вы сразу получите значение. Значение может быть установлено в конце концов, но это определенно не сразу. –