Я новичок в angular и немного борюсь с rxjs и всеми асинхронными вещами.
Немного контекста
Допустим, у вас есть веб-сайт, например, Facebook с профилями.Вы можете перейти к профилю, перейдя на website.com/profiles/profileUrl
.Точно так же при нажатии на профиль вы получаете маршрут к profiles/:profileUrl
в угловых терминах.
Как это реализовано?
Я направляюсь к PersonProfileComponent
и получаю данные профиля избэкэнд, оба на основе profileUrl
:
Компонент :
export class PersonProfileComponent implements OnInit {
person: Observable<PersonTO>;
constructor(private route: ActivatedRoute,
private mockDataService: MockPersonService) {}
ngOnInit() {
this.route.params.subscribe(params => {
this.initializePerson(params['profileUrl']);
});
}
initializePerson(profileUrl: string) {
this.mockDataService.getFullPersonByProfilUrl(profileUrl).
subscribe(foundPerson => {
this.person = of(foundPerson);
});
}
}
Шаблон :
<p>
profile works {{(person | async)?.profileUrl}}!
</p>
Проблема
Хотя все работает, мне больше всего не нравится эта часть в шаблоне "(person | async)?.profileUrl
".Объект person может стать довольно большим со многими атрибутами, я не могу представить себе доступ к каждому атрибуту, подобному этому.Это просто не правильно.Есть ли способ обойти это, все еще используя асинхронный канал, так как он обрабатывает все подписки и отписки для меня?Кроме того, я благодарен за любую критику в отношении этого фрагмента и того, как его лучше реализовать!