В этой ссылке есть код с частью моего приложения: stackblitz.com / edit / angular-wfpjb8 .Это шоу, в чем моя проблема.(обратите внимание на console.log в консоли)
КРАТКОЕ ОПИСАНИЕ: В Angular 6 у меня есть поиск компонентов, где у меня есть ввод.Когда я нажимаю ENTER, получаю некоторые данные из БД в сервисе httpService:
keyDownFunction(event){
if(event.keyCode == 13) {
this.httpService.searchPoint().subscribe(
points => {
this.mapService.setSearchPoints(points);
this.router.navigate(['/home/search/']);
});
}
}
Из бэкэнда я получаю некоторые данные в формате: [{}, {}, {}, {} ...] иэти данные я отправляю через mapService в компонент ResultComponent, где я хочу отобразить эти данные.mapService:
setSearchPoints(points){
this.pointList.next(points);
}
getSearchPoints(){
return this.pointList.asObservable();
}
Компонент Results Компонента, где я подписываюсь на данные из сервиса и хочу отображать данные.
export class ResultsSearchComponent {
points;
constructor(private mapService: MapService) {
this.mapService.getSearchPoints().subscribe((points) => {
console.log('1: ', points);
this.points = points;
});
console.log('2: ', points);
}
ПРОБЛЕМА:
- Когда я впервые устанавливаю данные из бэкэнда, console.log 1 не выполняется (поэтому мои данные из бэкэнда не будут записываться), а console.log 2 выполняется не определено - я хочу немедленно просмотреть данные из БД
- Когда я второй раз устанавливаю данные из бэкэнда (когда существует компонент ResultsComponent) console.log 1 записывает правильные данные из бэкэнда, а console.log 2 не выполняется.(все работает хорошо)
- Когда я закрываю этот компонент и устанавливаю данные из бэкэнда еще раз, console.log 1 записывает правильные данные (но это выполнение выполняется из последнего установленного набора), но 2 не выполняется.
- Когда я закрываю этот компонент еще раз, console.log 1 пишет дважды, когда я закрываю еще раз, выполняю три раза, четыре раза, пять раз и так далее ...
Я действительно не понимаю, почему это работает так, потому что, на мой взгляд, оно должно работать правильно. Скажите, пожалуйста, что я делаю неправильно.