Здравствуйте.
Прошу прощения за несколько спутанное описание и терминологию, пока не до конца понимаю специфику разработки на Angular 2.
Имею следующую иерархию компонентов:
MemberComponent -> DesktopComponent (router-outlet) -> PaymentHistoryComponent
Сервис: AccountService.
export class AccountService {
public accountSource = new Subject();
public account: Observable<any> = this.accountSource.asObservable();
public getAccount() {
return this.account;
}
public setAccount(account) {
this.accountSource.next(account);
}
...
В комоненте MemberComponent имеется drop-down-list со списком лицевых счетов, который при изменении вызывает метод
public changeAccount() {
this.accountService.setAccount(this.account);
}
PaymentHistoryComponent:
export class PaymentHistoryComponent implements OnInit {
public history;
public constructor(
public paymentService: PaymentSercice,
public accountService: AccountService,
public router: Router
) {
}
public ngOnInit() {
this.accountService.getAccount().subscribe((account) => {
this.paymentService.getHistory(account.value).then(history => this.history = history);
});
}
}
При загрузке приложения, MemberComponent выбирает первый из списка лицевой счёт и вызывает метод changeAccount. Таким образом вызывается метод AccountService::setAccount
На следующем этапе загрузки приложения подключается PaymentHistoryComponent и подписывается на Observable из сервиса AccountService, значение в которое уже было установлено ранее. Таким образом, не вызывается callback
this.accountService.getAccount().subscribe(...)
Но если уже теперь выбрать какой-то другой лицевой из списка, то сценарий отрабатывает корректно.
Как при инициализации компонента PaymentHistoryComponent получить значение уже имеющееся в AccountService.account