Я пытаюсь изучить реактивную разработку в Angular путем преобразования моих старых методов в сервисе, чтобы вообще НЕ подписываться в Observable.Пока что самым простым методом, который я уже преобразовал, был метод getAll.Теперь я хочу, чтобы, когда я выбрал одну карту в списке, я был перенаправлен на другую страницу, чтобы просмотреть ее детали.Рассмотрим приведенный ниже код, над которым я сейчас работаю.
СЕРВИС
@Injectable({
'providedIn': 'root'
})
export class CardService {
private selectedCardIdSubject = new Subject<number>();
selectedCardIdAction$ = this.selectedCardIdSubject.asObservable();
/**
* Retrieve single card based on card id.
*/
card$ = this.selectedCardIdAction$
.pipe(
tap(id => console.log(`card$: ${this._cardsApi}/${id}`)),
concatMap(id =>
this._http.get<Card>(`${this._cardsApi}/${id}`)
.pipe(
map(card => ({
...card,
imageUrl: `${this._cardImageApi}/${card.idName}.png`
}))
)
),
catchError(this.handleError)
);
onSelectedCardId(id: number) {
this.selectedCardIdSubject.next(id);
console.log(`onSelectedCardId: ${id}`)
}
}
КОМПОНЕНТ
@Component({})
export class CardDetailsComponent {
constructor(private _cardService: CardService,
private route: ActivatedRoute) {
this.selectedCardId = this.route.snapshot.params['id'];
this._cardService.onSelectedCardId(this.selectedCardId);
}
card$ = this._cardService.card$;
}
HTML
<div class="container mb-5" *ngIf="card$ | async as card">
<p>{{ card.name }}</>
</div>
В приведенном выше коде при перенаправлении мой простой HTML-код не отображает имя выбранной карты.Я использую [routerLink]
для перенаправления на странице сведений о карточке.
Компонент списка карточек
<div *ngIf="cards$ | async as cards">
<div class="col-md-1 col-4 hover-effect" *ngFor='let card of cards'>
<a class="d-block mb-1">
<figure>
<img class="img-fluid img-thumbnail" [src]='card.imageUrl' [title]='card.name' [alt]='card.name'
[routerLink]="['/cards', card.id]" />
</figure>
</a>
</div>
</div>
Кто-нибудь, кто может просветить меня о том, что здесь происходит?