Поскольку вы выполняете вызов API для данных в ngOnInit()
, запрошенные данные могут быть недоступны к моменту загрузки компонента.И Angular может повторно использовать один и тот же экземпляр компонента, заставляя ngOnInit()
вызываться только один раз.
Вы можете использовать Angular Resolvers, чтобы убедиться, что у вас есть необходимые данные перед загрузкой компонента.
1) Создайте преобразователь маршрута для извлечения необходимых данных перед загрузкой маршрута.
PostDataResolver.ts:
// ... imports
@Injectable()
export class PostDataResolver implements Resolve<any> {
constructor(private serverService: ServerService) {}
resolve(route: ActivatedRouteSnapshot) {
const id = route.paramMap.get('id');
return this.serverService.getPosts(id);
}
}
2) Добавьте этот преобразователь в своймодуль маршрутизации:
{ path: "oglas/:id", component: PostComponent, resolve: { postData: PostDataResolver }}
3) Затем получите доступ к разрешенным данным в вашем компоненте.
PostComponent.ts:
export class PostComponent implements OnInit {
post: Post[];
constructor(
private route: ActivatedRoute,
private serverService: ServerService
) {}
ngOnInit(): void {
this.post = this.route.snapshot.data.postData;
}
}
Это обеспечиваетчто у вас есть последние и соответствующие данные до загрузки компонента.